This question提出了一个非常有趣的观点;在Oracle文档中,关于在获取后%NOTFOUND是否可能为null似乎存在矛盾。是吗?

引用11g documentation



该文档似乎直接自相矛盾,因为它也表示以下内容,这意味着在获取%NOTFOUND之后不能为空。



10g documentation也有类似的警告,这不一定是直接的矛盾,因为它警告为获取此行为可能无法成功执行获取操作。



在什么情况下,执行获取后,获取可能会失败,或者%NOTFOUND返回null?

最佳答案

我发现一种提取可能失败的情况:

declare
  i integer;
  cursor c is
    select 1 / 0 from dual;
begin
  open c;

  begin
    fetch c
      into i;
  exception
    when others then
      dbms_output.put_line('ex');
  end;

  if c%notfound is null then
    dbms_output.put_line('null');
  elsif c%notfound then
    dbms_output.put_line('true');
  else
    dbms_output.put_line('false');
  end if;
  close c;

end;

但这只会使您的问题更强,因为无论在10g还是11g中,它都将评估为null……

10-05 20:11