日期:2014-05-17  浏览次数:20925 次

为什么变量跟踪器里sqlcode 为0,仍会执行到raise ex_dan,但是又不执行when ex_dan then里的操作
测试传的参数
v_unitstr       'G00009 ', 'G00037 '$ 'G00044 '
v_workno         001W0002

create   or   replace   procedure   P_ZDHZ(v_unitstr   in   varchar2,
                                                                      v_workno     in   varchar2,
                                                                      v_retunum   out   number,
                                                                      v_retext     out   varchar2)   is
    i                   int;
    str               varchar2(5000);
    trueunit     varchar2(5000);
    falseunit   varchar2(5000);
    v_zdno         varchar2(100);
    dhrenum       number;
    dhreerr       varchar2(100);
    v_buyunit   varchar2(100);
    v_unit         varchar2(100);
    v_sql           varchar2(5000);
    ex_dan         EXCEPTION;
begin
    trueunit     :=   ' ';
    falseunit   :=   ' ';
    str               :=   v_unitstr;
    i                   :=   instr(str,   '$ ');
    trueunit     :=   trueunit   ||   substr(str,   1,   i   -   1);
    falseunit   :=   falseunit   ||   substr(str,   i   +   1,   LENGTH(str));
    if   trueunit   is   not   null   or   trueunit   <>   ' '   then
        p_mkdh( 'ZT ',   v_zdno,   dhrenum,   dhreerr);
        if   dhreerr   =   'ok '   then
            select   buyunit   into   v_buyunit   from   g_workers   where   workno   =   v_workno;
            if   sqlcode   !=   0   then
                v_retunum   :=   -1;
                v_retext     :=   '取操作员的单位出错 '   ||   sqlerrm;
                raise   ex_dan;
            end   if;
            v_sql:= 'insert   into   y_zd   (primaryn