DBMS_SQL.NUMBER_TABLE
は連想配列です:
データベース テーブルとは異なり、連想配列:
- ディスク容量やネットワーク操作は不要
- DML ステートメントで操作できない
select into
連想配列は使用できますが、select
.
ネストselect into
した表を使用することはできますが、ブロック内で型が宣言されている場合は、SQL文内では無効なPL/SQL型になるため、それを使用することはできません。select
これを実現するには、SQL (つまり、PL/SQL ではない) で定義されたネストしたテーブル型が必要です。簡単にするための組み込み型がありますが、独自の型を定義できます。
declare
v_table sys.odcinumberlist;
v_table2 sys.odcinumberlist;
begin
select a_id bulk collect into v_table
from (select a_id from b where length(b_data) > 4);
select a.a_id bulk collect into v_table2
from table(v_table) vt
join a on a.a_id = vt.column_value;
end;
/
anonymous block completed
select
あなたが示した 2 番目は不完全なので、1 つ作成しました。最初はネストされた を必要としません。これは次のselect
ように簡略化できます。
select a_id bulk collect into v_table
from b
where length(b_data) > 4;
うまくいけば、2 番目の の前にコレクションで何かを実行しているはずです。select
そうしないと、少し意味がありません。同じ結果を得るには、2 番目に参加a
するだけです。b
select
select a.<columns> ...
from a
join b on b.a_id = a.a_id
where length(b.b_date) > 4;