Oracle
 sql >> база данни >  >> RDS >> Oracle

Предаване на масив от данни като входен параметър към процедура на Oracle

Това е един от начините да го направите:

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

За да разширите коментара си до отговора на @dcp, ето как бихте могли да приложите предложеното там решение, ако искате да използвате асоциативен масив:

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> 

Това търгува, създавайки самостоятелен Oracle TYPE (който не може да бъде асоциативен масив) с изискване за дефиницията на пакет, който може да бъде видян от всички, за да може TYPE, който дефинира там, да може да се използва от всички.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изключване и стартиране на екземпляра на Oracle

  2. Продължителност на данните в глобална временна таблица?

  3. Защо времето за изпълнение на съхранената процедура на Oracle се увеличава значително в зависимост от това как се изпълнява?

  4. Как да извика супер метод на Oracle PL/SQL обект

  5. 4 начина за намиране на редове, които съдържат малки букви в Oracle