如题:
存储过程代码如下:
create or replace procedure declare_CC_company_by_stopFlag(v_friend_id_st    varchar2,
                                                     v_sales_emp_id    number,
                                                     v_operate_emp_id  number,
                                                      v_stop_flag number,
                                                     v_class_id  number, 
                                                     v_mess            out varchar2,
                                                     v_out_friend_id   out varchar2,
                                                     v_out_friend_name out varchar2 )
             ...........
            ...........
             ...........
             ...........
              ...........EXCEPTION
  WHEN friend_conflict THEN
    v_mess := '该客户负责人已经在CRM中存在!';
    RAISE_APPLICATION_ERROR(-20009, '该客户负责人已经在CRM中存在!', TRUE);
  WHEN friend_overflow THEN
    v_mess := '已超出客户声明上限!';
    RAISE_APPLICATION_ERROR(-20009, '已超出客户声明上限!', TRUE);
  WHEN no_privilege THEN
    v_mess := '请检查是否有权限,并符合销售管理制度!';
    RAISE_APPLICATION_ERROR(-20009,
                            '请检查是否有权限,并符合销售管理制度!',
                            TRUE);
  WHEN OTHERS THEN
    v_mess := '未知错误,数据异常!请与管理员联系!';
    RAISE_APPLICATION_ERROR(-20009,
                            '未知错误,数据异常!请与管理员联系!',
                            TRUE);
end declare_CC_company_by_stopFlag;我想问存储过程抛出异常的时候,会拿到v_mess的值吗? 我做测试的时候没有得到,不知是否正确.
如果能得到v_mess的值,该如果得到? 谢谢

解决方案 »

  1.   

    想直观的看到 就做个日志表 用来记录异常信息。遇到异常就往日志表里 写入v_mess的值
    你这个方法也可以 但是我也不知道在哪能看的到我们通常都是把异常信息写入表 或者做个传出参数返回给前台
      

  2.   

    SQLERRM和SQLERROR这两个全局变量
      

  3.   

    我所指的得到v_mess是指在java程序中得到,不是在数据库端或是在日志中,因为要做异常处理.....
      

  4.   

    v_mess 是可能通过 java代码取到的, 你找一下存储过程的方法,
      

  5.   

    存储过程的代码已经给出了,省略号里代表的是业务逻辑和程序的到信息没有关系啊,不过问题已经解决了 修改不同的异常错误代码,捕捉异常信息不同的代码 在java里面写业务信息.... 变相的解决了。