在INSERT期间将if else条件放在子查询中

时间:2018-05-19 00:37:48

标签: oracle if-statement insert subquery

SELECT CODE * STATUS_CODE WHERE CODE IN (.....);

上面的SQL是嵌入在insert语句中的子查询,用于确定列CLOSE_CODE到' Y' (如果查询返回)或' N' (如果查询没有返回)。

如何在插入语句中添加类似IF ELSE条件的查询?

INSERT INTO CODE_REVIEWS (CLOSE_CODE) 
VALUES (....)

1 个答案:

答案 0 :(得分:0)

您可以使用NVL()执行此操作。重写查询,以便它返回' Y'如果有记录。从'Y'中选择DUAL,然后使用EXISTS。如果不存在此类行,则子查询的结果将为NULLNVL()会将NULL转换为'N'

NVL((SELECT 'Y'
            FROM DUAL
            WHERE EXISTS (SELECT *
                                 FROM STATUS_CODE
                                 WHERE CODE IN (....))),
    'N')

更详细的版本,也适用于许多其他DBMS,可以使用CASE并再次使用EXISTSWHEN这样的行存在,'Y'将被返回,ELSE 'N'

CASE
  WHEN EXISTS (SELECT *
                      FROM STATUS_CODE
                      WHERE CODE IN (...))
    THEN 'Y'
  ELSE
    'N'
END