1

テーブル(SPの入力パラメーターとして提供されるテーブル名)を読み取り、結果を一時テーブルに保存してから、読み取りテーブルのカウントを変数に保存する必要があるという要件があります。これを達成する方法を教えてください。動的クエリを使用してテーブルとそのカウントを読み取ることができましたが、結果を一時テーブル/変数に入れることができません。「Select」句と「Into」句が「Execute Immediate」で機能していないようです。ありがとう。

4

1 に答える 1

1

何が求められているのか正確にはわかりませんが、次の方法で SELECT ステートメントを実行できるはずです。

CREATE PROCEDURE p1(IN tablename VARCHAR) AS
BEGIN
   execute immediate 'SELECT * FROM ' || :tablename;
END;

次に、次のステートメントでテーブルを作成し、プロシージャを呼び出して結果を取得します。

create table T (i integer);
insert into T values (123);

次の例では、値が 123 の 1 つの行/列を含む結果セットが生成されます。

CALL p1('T')

このタイプの機能では、SQL インジェクション攻撃の可能性を回避するために、EXECUTE IMMEDIATE を使用するプロシージャにユーザー提供の入力を直接渡さないように十分注意する必要があります。

于 2014-03-07T16:55:41.263 に答える