你能不能把ov_ret_code 作为函数的返回值,而将
o_receipt_info_cur  OUT g_receipt_info_cur  
作为输出参数?这样在exception时就无需返回o_receipt_info_cur了。

解决方案 »

  1.   

    Lastdrop(空杯) 
    一定要按照那样的方法做呢?
    如何处理这样的问题?
      

  2.   

    如果你确实需要返回cursor,可以在过程的一开始open,然后在真正操作前close,这样即使有exception也没关系了。BEGIN
      OPEN o_receipt_info_cur FOR select 1 from dual;
      ....  CLOSE o_receipt_info_cur;  OPEN o_receipt_info_cur FOR
                SELECT
                    'R'                        TABLE_TYPE,
      ...                
      

  3.   

    我觉的不行,
    现在的问题是:
    返回之是cursor,
    如果你出错了在exception里面没有return
    就会出问题,
    你可以实验实验.
    一个function
    没有return就有错误产生,你有msn?
      

  4.   

    我的意思是你在exception时,还是要return o_receipt_info_cur的,只是在你原来的function中OPEN o_receipt_info_cur FOR在        IF ln_rec_count <> 0 THEN 
                ov_ret_code := 2 ;
                lv_error_str := 'the cheque exist in pms_dps_refund';
                RAISE l_proc_exp;
            END IF;
    之后,那么有可能在有exception时,cursor还未open,所以建议你在执行上述判断前,先open cursor, 尽管cursor中并不是你要的内容,这样在exception中return时就不会报cursor未打开的错误了。