エラーを与えるUSING句を使用したEXECUTE IMMEDIATE
-
06-07-2019 - |
質問
すべて、
私は一般にストアドプロシージャは初めてですが、特にOracleのストアドプロシージャと格闘しています。私が達成しようとしていることの非常に単純な例を作成しましたが、この簡易バージョンでも同じエラーが発生します。
ストアドプロシージャの例は次のとおりです。
CREATE OR REPLACE PROCEDURE ashish_test
AUTHID CURRENT_USER IS
BEGIN
DECLARE
v_tab VARCHAR2(50);
v_strSQL VARCHAR2(50);
BEGIN
v_strSQL := 'SELECT * FROM :1';
v_tab := 'ex.emp';
EXECUTE IMMEDIATE v_strSQL USING v_tab;
END;
END;
CALL ashish_test()
を使用して上記のストアドプロシージャを呼び出すと、次のようになります:
エラーメッセージhttp://web1.twitpic.com/img /12831839-06a3ea536df5d5a0a839eb83d9e59d25.4a3936b8-scaled.jpg
この記事(例7-1を参照)、 USING
キーワードは、 v_strSQL
内の番号付きプレースホルダー(:1
)を保存されている値に置き換える必要があります v_tab
で。ただし、無効なテーブルエラーが発生し続けます。 EXECUTE IMMEDIATE
が何らかの理由でプレースホルダーを値に置き換えることができないためだと思いますが、なぜそうなのかわかりません。ここでバカなことをしているかどうかは誰にもわかりますか?
これをOracle 10gデータベースで実行しています& PL / SQL Developerを使用します。
解決
USING句は、テーブル名ではなくバインド変数(つまり、selectステートメントで列名を使用する場所)専用です。典型的な使用法は次のようになります。
Select col1 from table1 where col2 = :a
変数テーブル名を使用する場合は、次のようなものを使用します。
v_tab := 'ex.emp';
v_strSQL := 'SELECT * FROM ' || v_tab;
EXECUTE IMMEDIATE v_strSQL;
所属していません StackOverflow