我对以下查询收到ORA-01403: no data found
异常。这个错误的可能性有多大?
SELECT trim(name)
INTO fullname
FROM ( SELECT n.name
FROM directory dir, store n
WHERE dir.name = n.name
AND dir.status NOT IN ('F', 'L', 'M')
ORDER BY n.imp, dir.date)
WHERE rownum <= 1;
如何处理此错误?
答案 0 :(得分:7)
虽然您已经放置了条件,但更好的方法是处理未找到记录的情况或“找不到数据”错误。我会在上面编写代码,用它包含自己的BEGIN / EXCEPTION / END块来包装SELECT语句。
代码可能是这样的:
BEGIN
SELECT trim(name)
INTO fullName
FROM
(SELECT n.name
FROM directory dir,
store n
WHERE dir.name = n.name
AND dir.STATUS NOT IN ('F','L','M')
ORDER BY n.imp,
dir.date
)
WHERE rownum <= 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fullName = NULL;
END;
答案 1 :(得分:7)
如果Sandeep 描述的标准异常处理似乎有很多开销(就像在我的情况下一样)并且您使用{{1> 罚款或者某些&lt; not found&gt; 值),您可能只是将其转换为:
NULL
=&GT;没有 ORA-01403 提出:
select col into v_foo from bar where 1=0 -- would provoke ORA-01403
答案 2 :(得分:1)
可能是因为您的查询
SELECT n.name
FROM directory dir,
store n
WHERE dir.name = n.name
AND dir.STATUS NOT IN ('F','L','M')
ORDER BY n.imp,
dir.date
没有返回任何行
答案 3 :(得分:1)
如果dir.status
表中有任何空值,那么not in
可能没有按照您的想法执行。即使您认为应该获得一行或多行,也可能获得零行。您可以切换为and not (dir.status in ('F,'L','M'))
而不是dir.status not in ('F','L','M')
。
请参阅this以供参考。