【问题标题】:Create trigger that updates row depending on column value from other table创建根据其他表中的列值更新行的触发器
【发布时间】:2021-07-15 09:03:13
【问题描述】:

我想创建一个触发器,根据其他表 (TABLE1) 中的列值更新表 (TABLE2) 中的行。 需要更新哪一行取决于TBL1的ID。

    CREATE OR REPLACE TRIGGER INSERT_PAGE 
    BEFORE UPDATE OR INSERT
    ON TABLE1 
    FOR EACH ROW
    BEGIN
        IF INSERTING THEN 
                INSERT INTO TABLE2 (TBL1ID,STEP,PAGE) VALUES 
                (:NEW.TBL1ID,:NEW.STEP,15); 
        ELSIF UPDATING and :NEW.STATE='APPROVED' THEN 
            UPDATE TABLE2 
            SET PAGE=16 AND STEP1='TEXT123' 
            WHERE TBL1ID =TABLE1.TBL1ID; 
        END IF; 
    END; 

有人可以帮我创建一个带有更新语句的触发器吗? 这也是一个好方法吗?


所以我有两个表,table1 中的列状态在整个过程中都在变化。 根据 table1state 列的变化,我想更改或更好地说更新 table 2 中的行并设置一些列,例如表 2 中的 PAGESTATE 取决于表 1 中的列值 STATE。 我不希望每次更新 TABLE 1 时都创建一个新行,而应该只更新相应的行。

【问题讨论】:

  • 你真正需要什么,你能用一些数据解释一下吗?
  • 当然我编辑了我的问题:)

标签: oracle triggers apex


【解决方案1】:

据我了解,只有当 table1 中的状态更改为某行的“已批准”并且如果在 table1 中插入一行时,触发器才会在 table2 中插入该行时才更新 table2。

我已对您的代码进行了一些更正。如果不是您想要的,请告诉我。

CREATE OR REPLACE TRIGGER INSERT_PAGE 
    BEFORE UPDATE OR INSERT
    ON TABLE1 
    FOR EACH ROW
    DECLARE 
    BEGIN
        IF INSERTING THEN 
                INSERT INTO TABLE2 (TBL1ID,STEP,PAGE) VALUES 
                (:NEW.TBL1ID,:NEW.STEP,15); 
      
        ELSIF UPDATING THEN 
          
            IF :NEW.STATE = 'APPROVED' THEN 
          
               UPDATE table2 t2 SET
               STATE = :NEW.STATE, PAGE=16, STEP1='TEXT123'      
               WHERE t2.TBL1ID = :OLD.TBL1ID;
            
            END IF;
          
        END IF; 
    END; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多