首页 > 解决方案 > 创建根据其他表中的列值更新行的触发器

问题描述

我想创建一个触发器,根据其他表(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 中的列状态在整个过程中都在变化。根据table1中列状态的变化,我想更改或更好地说更新表 2 中的行,并根据表 1 中的列值STATE在表2中设置一些列,如PAGESTATE。我不想要那个每次更新 TABLE 1 时都会创建新行,因此只应更新相应的行。

表格1

表 2

标签: oracletriggersapex

解决方案


据我了解,只有当 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; 

推荐阅读