【问题标题】:Multiple WHEN Statements in Oracle SQLOracle SQL 中的多个 WHEN 语句
【发布时间】:2022-07-08 06:08:17
【问题描述】:

我可以在下面的 SQL 触发器上获得一些帮助吗?使用多个“WHEN”语句有问题。

create or replace TRIGGER TRANS_TASKS_TRIG02
      BEFORE INSERT OR UPDATE ON "TASKS"
      REFERENCING FOR EACH ROW
    WHEN(NEW.STATUS='WIP') BEGIN
      IF INSERTING OR UPDATING THEN
        :NEW.UPDATED_DATE := NEW_TIME(SYSDATE, 'GMT', 'PDT' );
       END IF;
    WHEN(NEW.STATUS<>'WIP') BEGIN
      IF INSERTING OR UPDATING THEN
        :NEW.UPDATED_DATE := NULL;
       END IF;
    END;

【问题讨论】:

    标签: sql oracle oracle-apex


    【解决方案1】:

    根据Oracle's documentation,触发器中不能有多个when 子句。

    您可以创建单独的触发器:

    create or replace TRIGGER TRANS_TASKS_TRIG02_WIP
          BEFORE INSERT OR UPDATE ON "TASKS"
          REFERENCING FOR EACH ROW
        WHEN(NEW.STATUS='WIP') BEGIN
          IF INSERTING OR UPDATING THEN
            :NEW.UPDATED_DATE := NEW_TIME(SYSDATE, 'GMT', 'PDT' );
           END IF;
        END;
    
    create or replace TRIGGER TRANS_TASKS_TRIG02_WIP
          BEFORE INSERT OR UPDATE ON "TASKS"
          REFERENCING FOR EACH ROW
        WHEN(NEW.STATUS<>'WIP') BEGIN
          IF INSERTING OR UPDATING THEN
            :NEW.UPDATED_DATE := NULL;
           END IF;
        END;
    

    或者有一个带有if 语句的触发器。注意if inserting or updating 条件是多余的,因为触发器只被调用before insert or update

    create or replace TRIGGER TRANS_TASKS_TRIG02
      BEFORE INSERT OR UPDATE ON "TASKS"
      REFERENCING FOR EACH ROW
    BEGIN
      IF :NEW.STATUS='WIP' THEN
        :NEW.UPDATED_DATE := NEW_TIME(SYSDATE, 'GMT', 'PDT' );
      ELSIF :NEW.STATUS<>'WIP' THEN
        :NEW.UPDATED_DATE := NULL;
      END IF;
    END;
    /
    

    【讨论】:

      猜你喜欢
      • 2021-01-24
      • 2021-02-05
      • 1970-01-01
      • 2020-01-27
      • 1970-01-01
      • 2022-08-17
      • 2015-04-17
      • 1970-01-01
      • 2016-07-08
      相关资源
      最近更新 更多