动态 SQL/异常处理 -00942 - Oracle PL/SQL [重复]
Posted
技术标签:
【中文标题】动态 SQL/异常处理 -00942 - Oracle PL/SQL [重复]【英文标题】:Dynamic SQL / Exception Handling -00942 - Oracle PL/SQL [duplicate] 【发布时间】:2016-07-27 09:33:24 【问题描述】:最初我试图创建一个异常来捕获一个不存在的表 (-00942)。 根据 Alex 和 Raj 的反馈,我修改了代码以使用 EXECUTE IMMEDIATE。 这有助于识别表,但是当我将表从“员工”更正为“员工”时,这是我的数据库中存在的表,我希望代码能够正常运行,就像我没有使用 EXECUTE IMMEDIATE 时一样.
使用 EXECUTE IMMEDIATE 时,代码是否可以无异常地运行,而不是生成 catch all 异常?
立即执行 'SELECT last_name INTO v_name FROM employees WHERE 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
【问题讨论】:
嗨,Alex - 我已经更新了我认为现在独一无二的问题。感谢您的参考。它有效,但我有一个问题 @SQL_rookie ...您的问题是有效的,因为当您尝试执行您的语句时,它无法理解“v_sal”并导致另一个异常。如果您对值进行硬编码或删除该子句,您的代码将起作用。 好的 - 立即执行'从员工中选择姓氏,其中薪水 = 12000' INTO v_name;谢谢大家 没错..:-))..如果你想使用 v_sal 作为参数,你也必须使用 using 子句。立即执行 'SELECT emp_name FROM employee WHERE emp_sal = :v_sal' into v_name USING v_sal; 【参考方案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
FROM employee_l
WHERE emp_sal = v_sal' INTO v_name;
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;
/
【讨论】:
以上是关于动态 SQL/异常处理 -00942 - Oracle PL/SQL [重复]的主要内容,如果未能解决你的问题,请参考以下文章
artifactdescriptorexception:Failed to read artifact descriptor for com.orac ,Maven异常,求解!
oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常