加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle – 当值不存在时无法’SELECT INTO’

发布时间:2020-12-12 16:29:15 所属栏目:百科 来源:网络整理
导读:SELECT Value1 INTO lValueFROM Table1WHERE Field1 = lTempValue; 匹配为true时,此方法正常.但如果匹配不成立,我收到错误. ORA-01403: no data found 理想情况下,这对我来说很好,因为我要检查旁边的值是否高于0,如果是,请在插入查询中使用该值.我不想检查值
SELECT Value1 INTO lValue
FROM   Table1
WHERE  Field1 = lTempValue;

匹配为true时,此方法正常.但如果匹配不成立,我收到错误.

ORA-01403: no data found

理想情况下,这对我来说很好,因为我要检查旁边的值是否高于0,如果是,请在插入查询中使用该值.我不想检查值,然后必须运行相同的查询来检索它本质上,如果可能的话,我想在一个查询中执行它,但我无法弄清楚如何完成.

如果有值,那么我希望该值进入lValue.如果没有值,那么我希望0进入lValue.有人有任何想法吗?我只是做了一个快速谷歌检查,但它干了.想看,我会在看的时候发布这个.谢谢您的帮助.

通常,您只是捕获异常
BEGIN
  SELECT value1
    INTO lValue
    FROM table1
   WHERE field1 = lTempValue;
EXCEPTION
  WHEN no_data_found
  THEN
    lvalue := 0;
END;

您可以使用NVL和聚合函数(MIN或MAX)编写更少的代码,但这往往不那么明显(例如,请注意,这些答案必须修改几次).并且它要求跟随你的人暂停片刻以了解你在做什么(以及你是否正确地做到了).一个简单的嵌套PL / SQL块很常见且非常容易理解.

然而,更重要的是,它不会隐藏由于重复行而导致的错误.如果你碰巧在table1中得到两行,其中field1是lTempValue,只捕获no_data_found异常允许意外的too_many_rows异常传播到调用者.由于您不希望有多行,这正是您想要的行为.使用聚合函数隐藏了以下事实:基础数据存在问题,导致您返回可能不正确的结果,并且无法检测到存在问题.一旦某些东西导致重复的行出现,我总是会发现错误 – 允许我在问题失控之前解决问题 – 而不是多年后发现我们已经有数百万个重复的行,代码偶尔会返回不正确的结果,并且在解决根本原因后我们会进行大量的数据清理工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读