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; 展开
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;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |