我写了一个简单的:
    FUNCTION process_ResultsData_Incident22(varDate IN DATE, varErrData OUT VARCHAR2)
    RETURN NUMBER IS num_Flg NUMBER; 
    BEGIN
        varErrData := '123';
        num_Flg := 1;
        RAISE_APPLICATION_ERROR(001,'Execute_system... ');
        RETURN num_Flg;
    END;
在别的过程里调用这个方法时,varErrData就是传不出来值,怎么办?请高手指教!

解决方案 »

  1.   

    抛出异常时,程序就终止了。你下面的return就不执行了。
    而且你的错误用001也不好。
      

  2.   

    去掉RAISE_APPLICATION_error就ok了,报错就不在执行了,自然不会有返回结果了。
     FUNCTION process_ResultsData_Incident22(varDate IN DATE, varErrData OUT VARCHAR2) 
        RETURN NUMBER IS num_Flg NUMBER; 
        BEGIN 
            varErrData := '123'; 
            num_Flg := 1; 
            --RAISE_APPLICATION_ERROR(001,'Execute_system... '); 
            RETURN num_Flg; 
        END; 
      

  3.   

    同上,错误代码最好不要用001,我以前用-10000,oracle后台的异常抛不到前台的
      

  4.   

    直接RETURN varErrData 做为函数的返回值就可以了吧?如果为空就证明没错,如果有错就返回 错误代码||错误信息 就行了。
    比如: ERROR_NUMBER := '0001';  -- 4位或者5随你定
         ERROR_MESSAGE := 'Sorry, that genius is not allowed.';varErrData := ERROR_NUMBER||' : '||ERROR_MESSAGE;返回varErrData最为函数返回值后再存储过程那里判断:varErrData IS NULL,如果不为空就 SUBSTR 解析出错误代码和错误号就好了.
    最好error_number_in 之容许从 -20000 到 -20999 之间,这样就不会与 ORACLE 的任何错误代码发生冲突。RAISE_APPLICATION_ERROR(-20001, 'Sorry, that genius is not allowed.');
      

  5.   

    一旦有异常,存储过程也没有返回值,无论如何返回的都是NULL
      

  6.   

    有异常,当然不会有返回值了。去掉RAISE_APPLICATION_ERROR
    就可以了。