oracle - 创建触发器以插入和删除行
问题描述
我被分配创建一个触发器,该触发器在表中插入、更新或删除表时起作用。如果是删除或更新,则该表必须在对另一个表执行操作之前存储较旧的值。如果是插入,则应将新行添加到新表中。它还应包括受每个操作影响的行数。到目前为止,这就是我所做的:
CREATE OR REPLACE TRIGGER archive_update
BEFORE INSERT OR UPDATE ON EMPLOYEE
FOR EACH ROW
BEGIN
INSERT INTO archive_emp(EMP_ID, FIRST_NAME, LAST_NAME, BIRTH_DAY,
SEX, SALARY, SUPER_ID, BRANCH_ID)
VALUES(:new.EMP_ID, :new.FIRST_NAME, :new.LAST_NAME,
:new.BIRTH_DAY, :new.SEX, :new.SALARY, :new.SUPER_ID, :new.BRANCH_ID);
END;
解决方案
要检查 dml 操作,您可以使用IF
带有适当 dml 谓词的条件
CREATE OR REPLACE TRIGGER archive_update
BEFORE
INSERT OR UPDATE ON EMPLOYEE
FOR EACH ROW
BEGIN
IF UPDATING OR DELETING THEN --You may add this
INSERT INTO archive_emp( emp_id, first_name, last_name,
birth_day, sex,salary,super_id,branch_id
) VALUES (:old.emp_id, :old.first_name,:old.last_name,:old.birth_day,
:old.sex,:old.salary,:old.super_id,:old.branch_id
);
ELSIF INSERTING THEN --and this
INSERT INTO archive_emp( emp_id, first_name, last_name,
birth_day, sex,salary,super_id,branch_id
) VALUES (:new.emp_id, :new.first_name,:new.last_name,:new.birth_day,
:new.sex,:new.salary,:new.super_id,:new.branch_id
);
END IF;
END;
/
推荐阅读
- node.js - 为什么 setstate 中的 *contact 未定义?
- python - 想要传递 false 但得到 Nameerror 异常
- keras - 双曲坐标(Poincaré 嵌入)作为神经网络的输出
- ios - 找不到 iOS 模拟器
- query-optimization - pg-promise的事务序列API中是否保留了顺序?
- c++ - 使用 Stream Builder 查询字符串
- javascript - 无法使用 jQuery get 检索 json 数据
- php - 我用于比较日期的 PHP 脚本无法正常工作
- php - 为什么不能在 laravel 中工作 ajax 上传文件
- python - 在 Docker 容器中运行 python 脚本错误的时区