サイクルで「即時実行」を使用できますか? 私はpl/sqlに値の組み合わせを生成する必要があります。 これについて私はサイクルのために一連のネストされたダイナミクスを呼び出すことを考えています。即時ループPL/SQLを実行
例: 列1は、この値を有する:C、D、E
私はこの組み合わせを生成したい: AC/AD/AE/BC/BD、B 列2は、この値Aを有します
for i in 1..count.column1
for j in 1..count.column2
dbms_output.put_line(column1.value(i)||'-'||column1.value(j));
end loop;
end loop;
私はすぐに実行 は、私が使用でき、列(変数)の数を知らないによる:/私はこのようなを取得するために思っています
BE?
declare
sql_stmt varchar2(200);
begin
sql_stmt := 'for i in 1..count.column1 for j in 1..count.column2 dbms_output.put_line(column1.value(i)||'-'||column1.value(j)); end loop; end loop';
execute immediate sql_stmt;
end;
しかし、エラーORA-06512があります。 どうすればいいですか? :)
ご協力ありがとうございました!
簡単にはありません。 'execute immediate'プロセスは、完全なSQL文とPL/SQLブロックを処理しますが、これらは呼び出し側プロシージャと変数スコープを共有しません。 'declare ... begin ... end;'ブロック全体を生成し、バインド変数を渡し、結果を配列または参照カーソルとして渡す必要があります。また、このような文をバッチで生成すると、Oracleのカーソル・キャッシュを細断処理する傾向があります。 –