oracle异常处理,当其他
在我下面的代码块中,当其他人以任何方式执行异常时,我无法执行异常。是否有语法错误??我也不能调用异常内部的过程。有解决方案吗oracle异常处理,当其他,oracle,exception-handling,Oracle,Exception Handling,在我下面的代码块中,当其他人以任何方式执行异常时,我无法执行异常。是否有语法错误??我也不能调用异常内部的过程。有解决方案吗 DECLARE CNT INT; err_msg VARCHAR2(2000); BEGIN SELECT av_isdbcexecuted(1, 'DDL') INTO CNT FROM DUAL; IF (CNT = 0) THEN BEGIN DBMS_OUTPUT.PUT_LINE ('INSID
DECLARE
CNT INT;
err_msg VARCHAR2(2000);
BEGIN
SELECT av_isdbcexecuted(1, 'DDL') INTO CNT FROM DUAL;
IF (CNT = 0) THEN
BEGIN
DBMS_OUTPUT.PUT_LINE ('INSIDE IF...');
EXECUTE IMMEDIATE 'call AV_DBCINSERT
(1,''DDL'',''hsolanki'',''Prj1'',''Item1'',''avarne'')';
EXECUTE IMMEDIATE 'CREATE TABLE AV_TEMP (col1 varchar(20))';
EXCEPTION
WHEN OTHERS THEN
--inside exception
err_msg := sqlerrm;
DBMS_OUTPUT.PUT_LINE ('INSIDE exception...' || err_msg);
EXECUTE IMMEDIATE 'call AV_DBCUPDATE (1,err_msg,''Failed'')';
END;
EXECUTE IMMEDIATE 'call AV_DBCUPDATE(1, NULL,''SUCCESS'')';
END IF;
END;
这一行不正确:
EXECUTE IMMEDIATE 'call AV_DBCUPDATE (1,err_msg,''Failed'')';
您应该允许对err\u msg
进行评估
EXECUTE IMMEDIATE 'call AV_DBCUPDATE (1,'''||err_msg||''',''Failed'')';
那么,它不是设计来做你想做的事情的
以下是您必须继续简化的方法:
DECLARE
CNT INT;
err_msg VARCHAR2(2000);
BEGIN
SELECT av_isdbcexecuted(1, 'DDL') INTO CNT FROM DUAL;
IF (CNT = 0) THEN
BEGIN
DBMS_OUTPUT.PUT_LINE ('INSIDE IF...');
AV_DBCINSERT (1,'DDL','hsolanki','Prj1','Item1','avarne');
EXECUTE IMMEDIATE 'CREATE TABLE AV_TEMP (col1 varchar(20))';
EXCEPTION
WHEN OTHERS THEN
--inside exception
err_msg := sqlerrm;
DBMS_OUTPUT.PUT_LINE ('INSIDE exception...' || err_msg);
AV_DBCUPDATE (1,err_msg,'Failed');
END;
AV_DBCUPDATE(1, NULL,'SUCCESS')';
END IF;
END;
这一行不正确:
EXECUTE IMMEDIATE 'call AV_DBCUPDATE (1,err_msg,''Failed'')';
您应该允许对err\u msg
进行评估
EXECUTE IMMEDIATE 'call AV_DBCUPDATE (1,'''||err_msg||''',''Failed'')';
那么,它不是设计来做你想做的事情的
以下是您必须继续简化的方法:
DECLARE
CNT INT;
err_msg VARCHAR2(2000);
BEGIN
SELECT av_isdbcexecuted(1, 'DDL') INTO CNT FROM DUAL;
IF (CNT = 0) THEN
BEGIN
DBMS_OUTPUT.PUT_LINE ('INSIDE IF...');
AV_DBCINSERT (1,'DDL','hsolanki','Prj1','Item1','avarne');
EXECUTE IMMEDIATE 'CREATE TABLE AV_TEMP (col1 varchar(20))';
EXCEPTION
WHEN OTHERS THEN
--inside exception
err_msg := sqlerrm;
DBMS_OUTPUT.PUT_LINE ('INSIDE exception...' || err_msg);
AV_DBCUPDATE (1,err_msg,'Failed');
END;
AV_DBCUPDATE(1, NULL,'SUCCESS')';
END IF;
END;
感谢您的编辑我认为您不需要对所有过程执行立即调用。只需简单地放置过程调用,而无需立即执行。像——
AV_DBCINSERT(1,'DDL','hsolanki','Prj1','Item1','avarne')代码>AV_DBCUPDATE(1,err_msg,'Failed')代码>和AV_DBCUPDATE(1,NULL,'SUCCESS')
谢谢@keyurpanchal谢谢您的编辑我想您不需要
为所有过程执行
立即调用。只需简单地放置过程调用,而无需立即执行。像——AV_DBCINSERT(1,'DDL','hsolanki','Prj1','Item1','avarne')代码>AV_DBCUPDATE(1,err_msg,'Failed')代码>和AV_DBCUPDATE(1,NULL,'SUCCESS')代码>谢谢@KeyurPanchal