oracle – 当值不存在时无法’SELECT INTO’
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异常传播到调用者.由于您不希望有多行,这正是您想要的行为.使用聚合函数隐藏了以下事实:基础数据存在问题,导致您返回可能不正确的结果,并且无法检测到存在问题.一旦某些东西导致重复的行出现,我总是会发现错误 – 允许我在问题失控之前解决问题 – 而不是多年后发现我们已经有数百万个重复的行,代码偶尔会返回不正确的结果,并且在解决根本原因后我们会进行大量的数据清理工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |