如果表中没有记录,如何让我的代码插入记录

问题描述 投票:0回答:1

我正在尝试创建允许用户输入队列名称的代码。然后,如果在 select 语句中返回行,请输入包含结果的记录。如果没有返回记录,我想要插入一条带有 norows 信息的记录。当我在 Toad 中运行该案例时,出现语法错误,然后出现。有人可以帮我解决这个语法错误吗?

SELECT CASE
WHEN EXISTS
(SELECT A.QUEUENAME, DECODE(A.SUBCONSTATUS, 0, 'ERROR', 1, 'NEW', 2, 'STARTED', 3, 'WORKING', 4, 'DONE', 5, 'RETRY', 6, 'TIMEOUT', 7, 'EDITED', 8, 'CANCELED', 9, 'HOLD', A.SUBCONSTATUS) STATUS, TRUNC(LASTUPDDTTM),COUNT() FROM SYSADM.PSAPMSGSUBCON A where A.SUBCONSTATUS in (0,1,2,4) AND A.QUEUENAME = '&QUEUENAME' and TRUNC(LASTUPDDTTM) = TRUNC(SYSDATE) GROUP BY A.QUEUENAME, DECODE(A.SUBCONSTATUS, 0, 'ERROR', 1, 'NEW', 2, 'STARTED', 3, 'WORKING', 4, 'DONE', 5, 'RETRY', 6, 'TIMEOUT', 7, 'EDITED', 8, 'CANCELED', 9, 'HOLD', A.SUBCONSTATUS), TRUNC(LASTUPDDTTM)
THEN
INSERT INTO NP2DBA.NP2_IB_MSGSTATUS
SELECT A.QUEUENAME, DECODE(A.SUBCONSTATUS, 0, 'ERROR', 1, 'NEW', 2, 'STARTED', 3, 'WORKING', 4, 'DONE', 5, 'RETRY', 6, 'TIMEOUT', 7, 'EDITED', 8, 'CANCELED', 9, 'HOLD', A.SUBCONSTATUS) STATUS, CURRENT_TIMESTAMP,COUNT() FROM SYSADM.PSAPMSGSUBCON A where A.SUBCONSTATUS in (0,1,2,4) AND A.QUEUENAME = '&QUEUENAME' and TRUNC(LASTUPDDTTM) = TRUNC(SYSDATE) GROUP BY A.QUEUENAME, DECODE(A.SUBCONSTATUS, 0, 'ERROR', 1, 'NEW', 2, 'STARTED', 3, 'WORKING', 4, 'DONE', 5, 'RETRY', 6, 'TIMEOUT', 7, 'EDITED', 8, 'CANCELED', 9, 'HOLD', A.SUBCONSTATUS), TRUNC(LASTUPDDTTM)

ELSE
INSERT INTO NP2DBA.NP2_IB_MSGSTATUS VALUES ('&QUEUENAME','NOROWS',CURRENT_TIMESTAMP, '0')
END
/
oracle-database sqlplus
1个回答
0
投票

Oracle SQL 中不使用 CASE 进行流控制(如 IF-ELSE)。要执行所需的操作(如果存在记录则插入记录,否则插入默认值),您必须结合使用 PL/SQL 或带有 IF 或 MERGE 的单独 SQL 语句。

© www.soinside.com 2019 - 2024. All rights reserved.