gpt4 book ai didi

oracle - 如果集合为空,FETCH INTO 不会引发异常,不是吗?

转载 作者:行者123 更新时间:2023-12-02 06:49:00 26 4
gpt4 key购买 nike

这是我正在尝试调试的一些实际代码:

BEGIN
OPEN bservice (coservice.prod_id);

FETCH bservice
INTO v_billing_alias_id, v_billing_service_uom_id, v_summary_remarks;

CLOSE bservice;

v_service_found := 1;
-- An empty fetch is expected for some services.
EXCEPTION
WHEN OTHERS THEN
v_service_found := 0;
END;

当参数化游标bservice(prod_id)为空时,它会将NULL提取到三个变量中,并且不会抛出异常。

所以,编写这段代码并期望它抛出异常的人都是错误的,对吧?该注释似乎暗示了这一点,并且需要空获取,然后它设置一个标志以供以后处理,但我认为这段代码也不可能用空集进行测试。

显然,它应该使用 bservice%NOTFOUND 或 bservice%FOUND 或类似的。

最佳答案

当参数化游标bservice(prod_id)为空时,它会将NULL提取到三个变量中,并且不会抛出异常。

错误

当 t 为空时,它不会获取任何内容,并且不会覆盖任何值。

declare

cursor c(dt in date) is
select dummy from dual
where dt > sysdate;

dummy_ dual.dummy%type;

begin

open c(sysdate + 2);
fetch c into dummy_;
close c;
dbms_output.put_line('1: ' || dummy_);

open c(sysdate - 2);
fetch c into dummy_;
close c;
dbms_output.put_line('2: ' || dummy_);

end;
/

打印

1: X
2: X

所以,编写这段代码并期望它抛出异常的人都是错误的,对吧?

显然,它应该使用 bservice%NOTFOUND 或 bservice%FOUND 或类似的。

关于oracle - 如果集合为空,FETCH INTO 不会引发异常,不是吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4881073/

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