oracle - 创建根据其他表中的列值更新行的触发器
问题描述
我想创建一个触发器,根据其他表(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中设置一些列,如PAGE和STATE。我不想要那个每次更新 TABLE 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;
推荐阅读
- css - 我希望有一个子项要求所有其他元素的宽度
- reactjs - react-native中如何使用eval()动态导入组件
- python - Python - 从 ReactJS div 中抓取列表内容
- opencv - Keras 从不同图像中提取相同特征
- c# - 使用 EF Core 3.1 通过不可翻译的方法进行过滤
- javascript - 如何使用 javascript 在远程 PC 的浏览器上播放来自机器的音频数据流?
- vba - Libre calc 宏一直有效,直到计算机重新启动
- c - 如何检测数字是C中的整数还是浮点数?
- javascript - 在顶点图表中动态添加系列
- python - 将变量放入正则表达式对象并将它们与常规文本区分开来