2016-10-06 6 views
0

新しい変数を動的SQLから参照しようとしています。トリガーでexecute immediateを使用して新しい変数を参照しています

私がselect :NEW.zh_naam into v_var from dual;を試してみて、変数を印刷すると、averythingは完全に機能します。

しかし、このexecute immediate('select :NEW.zh_naam from dual') into v_varのように動的SQLを使用しようとすると、エラーメッセージORA-01008: not all variables boundが表示されます。

この問題の回避策はありますか?

+0

fyiこれは前に出ました:http://stackoverflow.com/search?q=%5Bplsql%5D+dynamic+%3Anew+in+trigger –

答えて

2

execute immediateステートメントは、呼び出し側と変数スコープを共有しません。 (引用文内の:もバインド変数を示します)。この値をバインド変数として渡す必要があります。

execute immediate 'select :b from dual' into v_var using :new.zh_naam; 

アップデート:下記のディスカッションから、build the set of :new references dynamicallyと思われます。これは不可能です。代わりに、リリース・プロセスの一部としてトリガー全体を動的に生成することも、組み込みのOracle auditingまたはFlashback Data Archiveを使用可能にすることもできます。

+0

答えをありがとう。私は ':new.zh_naam'変数を作ることができないと思いますか? – Walle

+0

あなたは何を意味するのか分かりません。 –

+0

事は、私はテーブルを動的にアーカイブするトリガーを作成したいと思います。誰かがテーブルに列を追加した場合、新しい列もアーカイブするようトリガーを書き直したくありません。ですから、私は外部関数のテーブルからすべての列を取得します。たとえば、「new.zh_naam、:new.an_extra_column」を返します。私はその変数を使用して:new.zh_naamと:new.an_extra_column変数を '読み込み'したいと思います。今はもう少し明確になっていますか?私は英語でこのことをよく説明しているわけではありません。 – Walle

関連する問題