0
처음에는 존재하지 않는 테이블 (-00942)을 잡기 위해 예외를 만들려고했습니다. Alex와 Raj의 의견을 바탕으로 EXECUTE IMMEDIATE를 사용하도록 코드를 수정했습니다. 이 테이블을 식별하는 데에서 근무하지만 내가 'employe'에서 내 DB에 존재하는 테이블 인 'employees'로 테이블을 수정했을 때, 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
알았어 - 실행 즉시 '직원으로부터 성을 선택하십시오 어디 salary = 12000'INTO v_name; 고마워요 –