gpt4 book ai didi

sql - Oracle:即使没有找到数据,查询也始终只返回一行

转载 作者:行者123 更新时间:2023-12-02 20:08:26 24 4
gpt4 key购买 nike

我有一个这样的查询:

   select data_name
into v_name
from data_table
where data_table.type = v_t_id

通常,此查询应返回一行。当 v_t_id 上没有匹配项时,程序将失败并出现“未找到数据”异常。

我知道我可以在 PL/SQL 中处理这个问题,但我想知道是否有办法只在查询中做到这一点。作为测试,我尝试过:

select case
when subq.data_name is null then
'UNKNOWN'
else
subq.data_name
end
from (select data_name
from data_table
where data_table.type = '53' /*53 does not exist, will result in 0 rows. Need fix this...*/
) subq;

...但这显然行不通(因为 subq 为空与 subq.data_name 为 null 不同)。这是否可能,或者我应该检查我的 PL/SQL 解决方案?

(甲骨文10g)

最佳答案

有很多方法可以让这个变得更简单、更清晰,但这基本上阐明了技术:

SELECT data_name
FROM data_table
WHERE data_table.type = v_t_id

UNION ALL

SELECT NULL AS data_name
FROM dual
WHERE NOT EXISTS (
SELECT data_name
FROM data_table
WHERE data_table.type = v_t_id
)

当联合的第一部分为空时,第二部分将包含一行,当第一部分不为空时,第二部分将不包含任何行。

如果查询需要很长时间,请使用这个:

SELECT * FROM (  
SELECT data_name
FROM data_table
WHERE data_table.type = v_t_id

UNION ALL

SELECT NULL AS data_name
FROM dual
) WHERE data_name is not null or ROWNUM = 1

关于sql - Oracle:即使没有找到数据,查询也始终只返回一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4682821/

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