在我的下面的块中,当其他人以任何方式执行时我都无法执行异常。是否有任何语法错误?我也不能在异常中调用该过程。任何解决方案??
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;
答案 0 :(得分:0)
这一行不正确:
EXECUTE IMMEDIATE 'call AV_DBCUPDATE (1,err_msg,''Failed'')';
您应该允许评估err_msg
!
EXECUTE IMMEDIATE 'call AV_DBCUPDATE (1,'''||err_msg||''',''Failed'')';
然后,fantasy-land specs并不是为了做你想做的事。
以下是您必须简单的方法:
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;