根据我的经验,用到SELECT INTO 语句的地方,由于可能返回多记录或无记录,导致错误。所以最好针对每条SELECT 语句有一个错误拦截。这样便于调试。编译通过,只能说语法正确。你的BUG应该与查询的数据结果有关。ORACLE报错代码是什么?

解决方案 »

  1.   

    to dgcat_6:谢谢!
    “用到SELECT INTO 语句的地方,由于可能返回多记录或无记录,导致错误。所以最好针对每条SELECT 语句有一个错误拦截。”
    请问如何拦截?ORACLE报错代码是
    as_retval   -> 本次操作是否成功。
    0 ->成功
    1 ->已增礼
    2 ->不符合赠礼条件
    10 -> 参数错误请稍后再试
    11 -> 资料库存取错误请稍后再试
    12 -> 执行错误请稍后再试总是报11 -> 资料库存取错误请稍后再试请各位高手一定帮我!再次鞠躬致谢了!
      

  2.   

    另外,怎样在SQL*Plus或WorkSheet中调试带输入、输出参数的Stored Procedure啊?
    比如上面我的第一个存储过程,我这样调试时报错:declare
     retval int;
     retstr varchar2(20);
    begin 
    CPC.SP_ACTIVITY('0001','8030000000009831',retval,retstr);
    end;改成这样也报错!declare
     retval int;
     retstr varchar2(20);
    begin 
    Execute procedure CPC.SP_ACTIVITY('0001','8030000000009831',retval,retstr);
    end;
    怎么办啊?My God!天啊!谁有调试Stored Procedure的好经验好方法技巧传授一下,好吗?
      

  3.   

    给你个小例子,要在select .... into ...后加异常错误判断,主要是结果集不为一就会报错。
    create or replace procedure FunTest(in_str char)
    as
    v_str varchar2(100) := ' ';
    begin
    begin
    select id into V_str from zoutest where type = in_str;
    exception
    when others  then 
    if (sql%notfound) then
    v_str := 'error 0';
    end if; end;
    dbms_output.put_line(v_str);
             --如果还要继续
             --begin
             --......................
             --end;end;
    /
    execute FunTest('1');
      

  4.   

    如下:
    EBGIN
      SELECT A INTO B FROM TAB1 WHERE 。
    EXCEPTION
       WHEN NO_DATA_FOUND THEN
          MESSAGE('没有数据');
          --错误处理
       WHEN TOO_MANY_ROWS THEN
         MESSAGE('返回多行记录');
          --错误处理
       WHEN OTHERS THEN
         MESSAGE('其他异常')  
          --错误处理
    END ;EBGIN
      SELECT A1 INTO B1 FROM TAB2 WHERE 。
    EXCEPTION
       WHEN NO_DATA_FOUND THEN
          MESSAGE('没有数据');
          --错误处理
       WHEN TOO_MANY_ROWS THEN
         MESSAGE('返回多行记录');
          --错误处理
       WHEN OTHERS THEN
         MESSAGE('其他异常')  
          --错误处理
    END ;你如果在调试时,最好把EXCEPTION语句(异常处理屏蔽),如果设置了SYSTEM_MESSAGE语句,最好先注释掉。当出现错误时,应该出现ORA-XXXXX等错误提示。
      如果你有D2K,最好把代码放到里面调试,效果不错!
      

  5.   

    好长,建议你用plsql developer调试,www.smiling.com.cn里有下
    :)