1

FOR ステートメントで動的 SQL を使用することは可能ですか?

FOR ループを使用して、SELECT ステートメントからのレコードのバッチを処理しています。ただし、テーブル名を変数に格納するなど、実行時に SELECT ステートメントをフレーム化する必要がある場合はどうすればよいでしょうか。

for thisRecord as
    select myColumn from MyTable  --can this be dynamic?
do
    .......
end for;

次のようなものが欲しい

declare myCursor cursor for stmt;

set dynamicStmt = 'select myColumn from '||varTable;
prepare stmt from dynamicStmt;

for thisRecord as myCursor
do
    ......
end for;
4

2 に答える 2

1

単純FETCHにループで使用できます。

于 2013-11-20T12:06:17.630 に答える
0

他の誰も私の質問に答えていないので、これは FOR ステートメントで動的 SQL を直接使用することは不可能であることを意味していると思います。

ただし、他の人が言ったように、私はFETCHを使用できます。これは、後で見つけた別のトリッキーな方法で、私の場合はうまくいきます。

動的 SQL を使用して特定のテーブルのエイリアスを作成し、このエイリアスを FOR ステートメントで使用します。注意を払うべき唯一のことは、エイリアスが存在することを確認して、プロシージャをコンパイルできるようにすることです。

Create or replace procedure MyProcedure(tableName varchar(50))
Begin
  EXECUTE IMMEDIATE 'Drop alias myAlias';
  EXECUTE IMMEDIATE 'Create alias myAlias for '||tableName;

  for thisRecord as
   select * from myAlias
  do
     .........
  end for;
End
于 2013-11-27T02:49:36.613 に答える