创建根据其他 table 的列值更新行的触发器

Create trigger that updates row depending on column value from other table

我想创建一个触发器,根据来自其他 table (TABLE1) 的列值更新 table (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; 

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


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

据我了解,只有当 table1 中的状态更改为 'approved' 时,您才想更新 table2,如果在 table1 中插入了一行,触发器将在 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;