【问题标题】:Creating a trigger to insert and remove rows创建触发器以插入和删除行
【发布时间】:2019-09-12 16:46:46
【问题描述】:

我被分配创建一个触发器,该触发器在表中插入、更新或删除表时起作用。如果是删除或更新,则该表必须在对另一个表执行操作之前存储较旧的值。如果是插入,则应将新行添加到新表中。它还应该包括受每个操作影响的行数。到目前为止,这是我所做的:

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;

【问题讨论】:

  • 如果您发现答案有用,请考虑accepting,这样它也可以帮助其他人。另请阅读this

标签: oracle plsql database-trigger


【解决方案1】:

要检查 dml 操作,您可以使用带有适当 dml 谓词的 IF 条件

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;
/

【讨论】:

  • 我使用了你的代码,它正在工作。非常感谢
  • @SharoA.Abdulrazzaq:不客气。如果您发现答案有用,请考虑 accepting 它,这样它也可以帮助其他人。另请阅读 this
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-05
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多