Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Przekazywanie tablicy danych jako parametru wejściowego do procedury Oracle

Oto jeden ze sposobów:

SQL> set serveroutput on
SQL> CREATE OR REPLACE TYPE MyType AS VARRAY(200) OF VARCHAR2(50);
  2  /

Type created

SQL> CREATE OR REPLACE PROCEDURE testing (t_in MyType) IS
  2  BEGIN
  3    FOR i IN 1..t_in.count LOOP
  4      dbms_output.put_line(t_in(i));
  5    END LOOP;
  6  END;
  7  /

Procedure created

SQL> DECLARE
  2    v_t MyType;
  3  BEGIN
  4    v_t := MyType();
  5    v_t.EXTEND(10);
  6    v_t(1) := 'this is a test';
  7    v_t(2) := 'A second test line';
  8    testing(v_t);
  9  END;
 10  /

this is a test
A second test line

Aby rozwinąć mój komentarz do odpowiedzi @dcp, oto jak możesz zaimplementować proponowane tam rozwiązanie, jeśli chcesz użyć tablicy asocjacyjnej:

SQL> CREATE OR REPLACE PACKAGE p IS
  2    TYPE p_type IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
  3  
  4    PROCEDURE pp (inp p_type);
  5  END p;
  6  /

Package created
SQL> CREATE OR REPLACE PACKAGE BODY p IS
  2    PROCEDURE pp (inp p_type) IS
  3    BEGIN
  4      FOR i IN 1..inp.count LOOP
  5        dbms_output.put_line(inp(i));
  6      END LOOP;
  7    END pp;
  8  END p;
  9  /

Package body created
SQL> DECLARE
  2    v_t p.p_type;
  3  BEGIN
  4    v_t(1) := 'this is a test of p';
  5    v_t(2) := 'A second test line for p';
  6    p.pp(v_t);
  7  END;
  8  /

this is a test of p
A second test line for p

PL/SQL procedure successfully completed

SQL> 

Oznacza to utworzenie samodzielnego TYPU Oracle (który nie może być tablicą asocjacyjną) z wymaganiem definicji pakietu, który może być widziany przez wszystkich, aby TYP, który tam definiuje, mógł być używany przez wszystkich.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd instalacji klienta Oracle — zbyt długa ścieżka

  2. Czas trwania danych w globalnej tabeli tymczasowej?

  3. Jak uzyskać maksymalną możliwą datę w Oracle?

  4. Wyzwalacz Oracle ORA-04098:wyzwalacz jest nieprawidłowy i nie powiodła się ponowna weryfikacja

  5. Sortowanie bez rozróżniania akcentów i wielkości liter w Oracle z LIKE