ORACLE触发INSERT更新

Din*_*ine 3 oracle triggers

全部,我只是尝试创建一个触发器,它将从TABLE EMP中选择一个完整的记录,并在UPDATE尝试时将其插入到表EMP_ARCHIVE中(顾名思义,EMP_ARCHIVE表只是一个历史表,用于存储对邮件所做的更改) EMP表).两个表都具有相同的字段/列.以下是我试图创建的触发器.我知道有些不对劲但无法弄清楚.它会在'('跟随INSERT命令后抛出错误.任何帮助都会受到赞赏.请原谅我,如果有一些基本错误,因为我是这些人的新手.

CREATE OR REPLACE TRIGGER Save_EMP_Changes
BEFORE UPDATE ON EMP
FOR EACH ROW
BEGIN
   INSERT INTO EMP_ARCHIVE
   (
      emp_id, emp_name,
      emp_age, emp_sex,
      emp_active
   )
   SELECT 
      :old.emp_id, :old.emp_name,
      :old.emp_age, :old.emp_sex,
      :old.emp_active
   FROM EMP 
   WHERE emp_id = :old.emp_id
END;
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 6

无需从表中选择:

CREATE OR REPLACE TRIGGER Save_EMP_Changes
BEFORE UPDATE ON EMP
FOR EACH ROW
BEGIN
   INSERT INTO EMP_ARCHIVE
   (
      emp_id, emp_name,
      emp_age, emp_sex,
      emp_active
   )
   VALUES
   (  :old.emp_id, :old.emp_name,
      :old.emp_age, :old.emp_sex,
      :old.emp_active
   );
END;

顺便说一下:在Oracle 11中,你可以通过为这些表创建一个FLASHBACK ARCHIVE来完全自动化.没有触发器或任何其他麻烦.