sql >> データベース >  >> RDS >> Oracle

データの配列を入力パラメータとしてOracleプロシージャに渡す

    これはそれを行う1つの方法です:

    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. MS-Accessレコードセットおよびクラスモジュール

    2. pdoをテストするためのphpコードは利用できますか?

    3. Oracle sqlでの%Typeの意味は何ですか?

    4. SQLでSUBSTRINGを使用して文字のセットを取得するにはどうすればよいですか?