处理 - 在Oracle查询中找不到记录

时间:2014-12-12 09:44:03

标签: oracle oracle-apex

当有记录时,以下Oracle查询应该返回字段num的行。如果没有找到记录,我希望它返回N/A作为显示值,返回0作为返回值字段。

select num display_value, num return_value from cells 
  WHERE ss = 4
UNION ALL SELECT "N/A" display_value, 0 return_value from dual 
  WHERE NOT EXISTS (SELECT 1 FROM CELLS WHERE ss = 4) 

当找不到记录时,这不起作用,因为numNUMBER的类型和" N / A"不是NUMBER。问题是如何修改查询才能工作?也许有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

CASTTO_CHAR

select to_char(num) numdisplay_value, num return_value from cells 
  WHERE ss = 4
UNION ALL SELECT 'N/A' display_value, 0 return_value from dual 
  WHERE NOT EXISTS (SELECT 1 FROM CELLS WHERE ss = 4)

也许(看看你的执行计划),你可以通过使用CTE获得更好的结果。

至少,第二种解决方案更具可读性(根据我的口味),并且根据不重复自己原则可能更易于维护,因为您必须编写{{1只有一次子句:

where