sql >> Database >  >> RDS >> Oracle

Een array van gegevens doorgeven als invoerparameter aan een Oracle-procedure

Dit is een manier om het te doen:

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

Om mijn commentaar op het antwoord van @dcp uit te breiden, kunt u als volgt de daar voorgestelde oplossing implementeren als u een associatieve array wilt gebruiken:

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> 

Dit ruilt het creëren van een op zichzelf staand Oracle TYPE (dat geen associatieve array kan zijn) met het vereisen van de definitie van een pakket dat door iedereen kan worden gezien, zodat het TYPE dat het daar definieert, door iedereen kan worden gebruikt.



  1. SQL gebruiken om statistieken van het aantal woorden van een tekstveld te bepalen

  2. Goed nieuws voor Standard Edition-klanten in SQL Server 2014

  3. Is er een LastIndexOf in SQL Server?

  4. CHARINDEX() vs PATINDEX() in SQL Server - Wat is het verschil?