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 
+0

こんにちは、アレックス - 私は今、ユニークであると信じて質問を更新しました。参照ありがとう。それはうまくいったが、私は質問の後に –

+0

@SQL_rookie ...あなたの問題はあなたの文を実行しようとしたときに有効で、 "v_sal"を理解できず、別の例外になった。値をハードコードするか、その句を削除すると、コードは機能します。 – XING

+0

これを取得しました - 実行を即時に '選択姓のFROM従業員給与= 12000' INTO v_name;ありがとうございます –

答えて

1

以下試してください。

DECLARE 
    v_name employee.emp_name%TYPE; 
    v_sal employee.emp_sal%TYPE := 12000; 

    table_does_not_exist exception; 
    PRAGMA EXCEPTION_INIT(table_does_not_exist, -942); 

BEGIN 

execute immediate 
    'SELECT emp_name 
    INTO v_name 
    FROM employee_l 
    WHERE emp_sal = v_sal'; 

    DBMS_OUTPUT.put_line(v_name); 


EXCEPTION 

    WHEN table_does_not_exist then 
    dbms_output.put_line('table dose not exist'); 


    WHEN NO_DATA_FOUND THEN 
    dbms_output.put_line( 'No employee with a salary of '||TO_CHAR(v_sal)); 

    WHEN OTHERS THEN 
    dbms_output.put_line('Some other error occurred.'); 
END; 
/