小编典典

Oracle:获取查询以始终仅返回一行,即使找不到数据也是如此

sql

我有这样的查询:

   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 isnull)。这是否有可能,还是我应该只检查我的PL /SQL解决方案?

(甲骨文10克)


阅读 308

收藏
2021-04-07

共1个答案

小编典典

有多种方法可以使此方法更简单,更简洁,但这基本上说明了该技术:

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
2021-04-07