gpt4 book ai didi

oracle - 值不存在时无法到 'SELECT INTO'

转载 作者:行者123 更新时间:2023-12-04 16:26:16 25 4
gpt4 key购买 nike

SELECT Value1 INTO lValue
FROM Table1
WHERE Field1 = lTempValue;

当匹配为真时,这可以正常工作。但如果匹配不正确,我会收到一个错误。
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 编写更少的代码和聚合函数( MINMAX ),但这往往不太明显(注意,例如,这些答案必须修改几次)。并且它要求在您之后的任何人暂停片刻以了解您在做什么(以及您是否正确地做)。一个简单的嵌套 PL/SQL 块非常常见且不言自明。

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

关于oracle - 值不存在时无法到 'SELECT INTO',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12080428/

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