首页 > 解决方案 > DBVis/PL SQL: IF EXIST - 如果可能,如何正确构建

问题描述

使用 DBVis SQL 指挥官(因为我在这段代码中使用“开始”和“结束”,我相信这段代码是以 PL SQL 方式执行的)我正在尝试执行我编写的一个 sql 脚本作为我的新“清理扳机”

我试图在此脚本中使用 IF EXISTS 语句来实现仅当某个列确实包含数据(批准或拒绝)时清理

该脚本旨在不使用插入(到其他表)语句(如果使用这些语句,即使没有数据可供它们插入,这些语句也会以不希望的方式触发其他表上的其他触发器),除非实际上有(不null) 某列中的数据:

begin

IF EXISTS (SELECT * 
        FROM HUB_SEGMENTS 
        where APP_OR_REJECT = 'APPROVED' or APP_OR_REJECT = 'REJECTED')
        THEN
INSERT INTO
 HUB_APPROVED (HUB_SEGMENTS_GUID, TID, SEGMENT, ID, ROLE, UPDATED_BY, APP_OR_REJECT, UPDATED_DATE)
         SELECT 
         HUB_SEGMENTS_GUID, TID, SEGMENT, ID, ROLE, UPDATED_BY, APP_OR_REJECT, UPDATED_DATE 
         FROM 
         HUB_SEGMENTS WHERE APP_OR_REJECT = 'APPROVED';

INSERT INTO
 HUB_REJECTED (HUB_SEGMENTS_GUID, TID, SEGMENT, ID, ROLE, UPDATED_BY, APP_OR_REJECT, UPDATED_DATE)
         SELECT 
         HUB_SEGMENTS_GUID, TID, SEGMENT, ID, ROLE, UPDATED_BY, APP_OR_REJECT, UPDATED_DATE 
         FROM 
         HUB_SEGMENTS WHERE APP_OR_REJECT = 'REJECTED';     

DELETE
FROM
    "TESTDEMO".HUB_SEGMENTS
WHERE
    APP_OR_REJECT = 'APPROVED' or APP_OR_REJECT = 'REJECTED';
    DBMS_OUTPUT.PUT_LINE('Trigger: Insert to action Tables Executed');


ELSE 

    DBMS_OUTPUT.PUT_LINE('Trigger: Insert to action Tables Not Executed');

end;

不幸的是,当我尝试运行它时收到以下错误消息:

[代码:6550,SQL 状态:65000] ORA-06550:第 33 行,第 4 列:PLS-00103:遇到符号“;” 预期以下情况之一时:如果

我很确定这取决于我构建 IF EXIST 的方式

当然,在我的 PL SQL 代码中,可能不允许在 DBVis SQL 指挥官中使用 IF EXIST - 我还没有从 oracle 看到很多关于此特定语句的文档。如果是这样,我是否可以尝试另一种方式来完成我在这里尝试做的事情?

任何指导将不胜感激

标签: sqloracleplsqldbvisualizer

解决方案


你不需要我相信的如果存在就转

IF EXISTS (SELECT * 
        FROM HUB_SEGMENTS 
        where APP_OR_REJECT = 'APPROVED' or APP_OR_REJECT = 'REJECTED')
        THEN
INSERT INTO
 HUB_APPROVED (HUB_SEGMENTS_GUID, TID, SEGMENT, ID, ROLE, UPDATED_BY, APP_OR_REJECT, UPDATED_DATE)
         SELECT 
         HUB_SEGMENTS_GUID, TID, SEGMENT, ID, ROLE, UPDATED_BY, APP_OR_REJECT, UPDATED_DATE 
         FROM 
         HUB_SEGMENTS WHERE APP_OR_REJECT = 'APPROVED';

INSERT INTO
 HUB_APPROVED (HUB_SEGMENTS_GUID, TID, SEGMENT, ID, ROLE, UPDATED_BY, APP_OR_REJECT, UPDATED_DATE)
         SELECT 
         HUB_SEGMENTS_GUID, TID, SEGMENT, ID, ROLE, UPDATED_BY, APP_OR_REJECT, UPDATED_DATE 
         FROM 
         HUB_SEGMENTS where (APP_OR_REJECT = 'APPROVED' or APP_OR_REJECT = 'REJECTED');

推荐阅读