PL/SQL ブロックでバインド変数を設定しており、それを別のクエリの IN 式で使用しようとしています。このようなもの:
variable x varchar2(255)
declare
x varchar2(100);
begin
for r in (select id from other_table where abc in ('&val1','&val2','&val3') ) loop
x := x||''''||r.id||''',';
end loop;
--get rid of the trailing ','
x:= substr(x,1,length(x)-1);
select x into :bind_var from dual;
end;
/
print :bind_var;
select *
from some_table
where id in (:bind_var);
そして、「IN」リストでバインド変数を使用しようとするクエリでエラー (ORA-01722: 無効な番号) が発生します。
print ステートメント'123','345'
は、私が期待するものです。
このようにバインド変数を使用することは可能ですか、それとも別のアプローチを試す必要がありますか?
(Oracle 10g を使用)
説明:
これは和解のようなものです。走りたい
select *
from some_table
where id in (select id from other_table where abc in ('&val1','&val2','&val3'))
スクリプトの主要部分 (ここには描かれていません) が大量のレコードを削除する前に。後でもう一度実行して、のレコードsome_table
が削除されていないことを確認します。ただし、other_table
DOES のデータはこのプロセスによって削除されるため、データがother_table
存在しないため参照することはできません。other_table.id
後で親レコードを確認できるように、値を保存する方法が必要です。