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

SELECTINTOStatmentで数値のテーブルを使用する方法

    SQLは、ローカルPL/SQLスコープで宣言された型を使用できません。 SQLで定義する必要があります(*)

    SQL> create TYPE array_of_numbers IS TABLE OF NUMBER ;
      2  /
    
    Type created.
    
    SQL> 
    

    次に、TABLE()演算子を使用して、最初のコレクションをIN演算子で参照できるサブクエリに変換します。

    SQL> set serveroutput on
    SQL> declare
      2      v_list_parentID array_of_numbers;
      3      v_list_pNummer array_of_numbers;
      4  begin
      5      select dbuid bulk collect into v_list_parentID
      6          from v_catalog
      7          where parentid = 1;
      8      dbms_output.put_line('v_list_parentID count = ' || v_list_parentID.count());
      9
     10      select primitivumnummer bulk collect into v_list_pNummer
     11          from cw_felddaten
     12          where katalog in (select * from table( v_list_parentID));
     13
     14      dbms_output.put_line('v_list_pNummer count = ' || v_list_pNummer.count());
     15  end;
     16  /
    v_list_parentID count = 4
    v_list_pNummer count = 24
    
    PL/SQL procedure successfully completed.
    
    SQL> 
    

    MEMBEROF構文も機能します。入力は少なくなりますが、CW_FELDDATENに多くの行がある場合、TABLE()演算子ほどのパフォーマンスが得られない可能性があります。

    SQL> declare
      2      v_list_parentID array_of_numbers;
      3      v_list_pNummer array_of_numbers;
      4  begin
      5      select dbuid bulk collect into v_list_parentID
      6          from v_catalog
      7          where parent_id = 1;
      8      dbms_output.put_line('v_list_parentID count = ' || v_list_parentID.count());
      9
     10      select primitivumnummer bulk collect into v_list_pnummer
     11          from cw_felddaten
     12          where katalog member of v_list_parentID;
     13
     14      dbms_output.put_line('v_list_pNummer count = ' || v_list_pNummer.count());
     15  end;
     16  /
    v_list_parentID count = 4
    v_list_pNummer count = 24
    
    PL/SQL procedure successfully completed.
    
    SQL> 
    

    (*) 12cでは、SQLのパッケージ仕様で宣言されている型を使用できます。



    1. トリガーはクエリアトミックに基づいていますか?

    2. SQLサーバースキーマとデフォルトスキーマ

    3. MariaDB JSON_INSERT()の説明

    4. Parallel.ForをSQLコマンドで使用できますか?