0
最初は存在しなかった(-00942)テーブルをキャッチするために例外を作成しようとしていました。 AlexとRajの両方からのフィードバックに基づいて、私はEXECUTE IMMEDIATEを使用するコードを修正しました。 これはテーブルを識別するのに役立ちましたが、テーブルを 'employe'から 'employees'を自分のDBに存在するテーブルに訂正したとき、EXECUTEを使用しなかった場合と同じようにエラーなしでコードを実行することができました即時。動的SQL /例外処理-00942 - Oracle PL/SQL
EXECUTE IMMEDIATEを使用しているときに例外なくコードを実行することは可能ですか?
EXECUTE IMMEDIATE 'SELECT last_name INTO v_name FROM employees salary = v_sal';
時には :g_message:= 'その他のエラーが発生しました。';
私はコードが例外なく実行されることを望んでいました。
VARIABLE g_message VARCHAR2(250)
DEFINE p_sal = 12000
DECLARE
v_name employees.last_name%TYPE;
v_sal employees.salary%TYPE := &p_sal;
table_does_not_exist exception;
PRAGMA EXCEPTION_INIT(table_does_not_exist, -942);
BEGIN
EXECUTE IMMEDIATE
'SELECT last_name INTO v_name FROM employees WHERE salary = v_sal';
DBMS_OUTPUT.put_line(v_name);
EXCEPTION
WHEN table_does_not_exist then
:g_message := 'table dose not exist';
WHEN NO_DATA_FOUND THEN
:g_message := 'No employee with a salary of '||TO_CHAR(v_sal);
WHEN OTHERS THEN
:g_message := 'Some other error occurred.';
END;
/
PRINT g_message
こんにちは、アレックス - 私は今、ユニークであると信じて質問を更新しました。参照ありがとう。それはうまくいったが、私は質問の後に –
@SQL_rookie ...あなたの問題はあなたの文を実行しようとしたときに有効で、 "v_sal"を理解できず、別の例外になった。値をハードコードするか、その句を削除すると、コードは機能します。 – XING
これを取得しました - 実行を即時に '選択姓のFROM従業員給与= 12000' INTO v_name;ありがとうございます –