Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oracle异常处理,当其他_Oracle_Exception Handling - Fatal编程技术网

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