SQLステートメントで使用できるのはSQLタイプのみです。そのため、そのPL/SQL配列をSQL配列に変換する必要があります。
たとえば、your_array
型を作成する場合です。
SQL> create table your_table(col varchar2(3));
Table created.
SQL> insert into your_table values ('AA');
1 row created.
SQL> insert into your_table values ('DEF');
1 row created.
SQL> create type your_array as table of varchar2(4000);
2 /
Type created.
SQL> DECLARE
2 ltab_vals DBMS_UTILITY.LNAME_ARRAY;
3 v_tablen BINARY_INTEGER;
4 v_t your_array := your_array();
5 BEGIN
6
7 DBMS_UTILITY.COMMA_TO_TABLE(list => 'AA,B,CC,DEF'
8 ,tablen => v_tablen
9 ,tab => ltab_vals);
配列をSQLにコピーします。
10 for idx in 1..ltab_vals.count
11 loop
12 v_t.extend;
13 v_t(v_t.last) := ltab_vals(idx);
14 end loop;
15
次に、関数を使用して選択を形成しますtable()
。カーディナリティのヒントは、配列内の要素の数を適切に推測する必要があります。このヒントがないと、オラクルがより悪い計画を選択することに気付くかもしれません(デフォルトでは、配列内で最大8k行を想定します)。
17 for r_row in (select /*+ cardinality(p, 10) */ t.*
18 from your_table t
19 inner join table(v_t) p
20 on t.col = p.column_value)
21 loop
22 dbms_output.put_line(r_row.col);
23 end loop;
24
25 END;
26 /
AA
DEF
PL/SQL procedure successfully completed.