gpt4 book ai didi

oracle - 在隐式游标上使用 sql%notfound

转载 作者:行者123 更新时间:2023-12-02 08:46:24 25 4
gpt4 key购买 nike

我对 Oracle PLSQL 完全陌生。任何帮助表示赞赏。

我找不到类似的问题(也许它太基础了?)

我正在运行来自 TOAD、Oracle 11G 的代码

SET SERVEROUTPUT ON
DECLARE
var titres%ROWTYPE;
BEGIN
select reference, sicovam into
var.reference, var.sicovam
from titres
where reference = '1234';
if sql%notfound then
dbms_output.put_line('NOT FOUND');
else
dbms_output.put_line(var.reference || ' ' || var.sicovam);
end if;
END;

如果Where子句可以提取一行数据,那么它将运行else部分

如果Where子句无法提取任何行,则会显示错误:

ORA-01403: no data found
ORA-06512: at line 4

有人能指出我正确的方向吗?谢谢

我尝试过使用基本的异常处理代码

When others then 
null;
end;

然后我得到了另一个奇怪的结果:如果 Where 子句可以提取一行数据,那么它不会运行 else 部分或 if 部分。

最佳答案

当 pl/sql block 内的查询未返回任何行时,会立即引发 NO_DATA_FOUND 异常,并且该 block 的执行将停止。因此 if sql%notfound then 条件永远不会被评估。要捕获该异常并做出相应响应,您需要 EXCEPTION 部分。

SET SERVEROUTPUT ON
DECLARE
var titres%ROWTYPE;
BEGIN
-- In this case you have to be sure that the query returns only one row
-- otherwise the exception ORA-01422 will be raised
select reference, sicovam into
var.reference, var.sicovam
from titres
where reference = '1234';

dbms_output.put_line(var.reference || ' ' || var.sicovam);

EXCEPTION
WHEN NO_DATA_FOUND
THEN dbms_output.put_line('NOT FOUND');
END;

关于oracle - 在隐式游标上使用 sql%notfound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14212112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com