oracle 未找到数据 select行报错 求解? 下面只是一部分

FUNCTIONgetorder(interfaceinvarchar2)RETURNNUMBERISp_tempnumber:=0;BEGINifnvl(interfa... FUNCTION getorder(interface in varchar2)
RETURN NUMBER IS
p_temp number := 0;
BEGIN
if nvl(interface,'a')<>'a' then
select nvl(ooh.header_id, 0)
into p_temp
from oe_order_headers_all ooh
where to_char(ooh.order_number) = interface;
end if;
if p_temp <> 0 then
return 2;
else
return 0;
end if;
END getorder;
展开
 我来答
匿名用户
2013-06-07
展开全部
测试   ORA-01403: 未找到数据  异常的处理.

CREATE TABLE test_Data_Not_Found (
id INT,
val VARCHAR2(10)
);

INSERT INTO test_Data_Not_Found (id, val) VALUES(1, 'A');
INSERT INTO test_Data_Not_Found (id, val) VALUES(2, 'B');


create or replace function Get_Test_Value( p_id  test_Data_Not_Found.id%type )
RETURN test_Data_Not_Found.val%type
IS
  -- 返回值.
  v_result  test_Data_Not_Found.val%type;
  -- ORA-01403: 未找到数据 异常.
  e_data_Not_Found_exception EXCEPTION;
  PRAGMA EXCEPTION_INIT(e_data_Not_Found_exception, 100);
BEGIN
  
  -- 查询.
  SELECT
    val  INTO  v_result
  FROM
    test_Data_Not_Found
  WHERE
    id = p_id;
  
  -- 返回.
  RETURN v_result;

  EXCEPTION
    WHEN e_data_Not_Found_exception THEN
-- 捕获到异常后, 输出调试信息,然后再将异常抛出.
        dbms_output.put_line('未能检索到 ID = ' || TO_CHAR(p_id) || ' 的数据 !');
RAISE e_data_Not_Found_exception;
END;
/


简单 SQL 查询的时候, 如果数据不存在, 也不会发生异常.

SQL> select Get_Test_Value(1) from dual;

GET_TEST_VALUE(1)
--------------------------------------------------------------------------------
A

SQL> select Get_Test_Value(5) from dual;

GET_TEST_VALUE(5)
--------------------------------------------------------------------------------



作为代码执行的时候, 将会导致异常。

SQL> DECLARE
  2    v_tmp  varchar2(10);
  3  BEGIN
  4    v_tmp := Get_Test_Value(5);
  5  END;
  6  /
未能检索到 ID = 5 的数据 !
DECLARE
*
ERROR 位于第 1 行:
ORA-01403: 未找到数据
ORA-06512: 在 "TEST.GET_TEST_VALUE", line 26
ORA-01403: 未找到数据
ORA-06512: 在 line 4



你这个出错的原因,  可能是  


select nvl(ooh.header_id, 0)
    into p_temp
    from oe_order_headers_all ooh
   where to_char(ooh.order_number) = interface;



这一类的语句,  查询的时候, 没有数据行的原因.

追问
那要怎么判断有没有数据行 返回个值什么的
追答
你有两种选择

一种是 查询2次。
也就是 先 SELECT COUNT(*) INTO 临时变量 FROM ... WHERE ...
IF 临时变量 > 0 THEN
select ... INTO p_temp from oe_order_headers_all ooh
ELSE
p_temp := 0;
END IF;

一种是像例子代码的样子, 定义一个异常
然后捕获异常。
如果异常触发了, 那么 p_temp := 0;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式