在TRIGGER中使用INSERT INTO ... SELECT

时间:2017-02-02 13:05:56

标签: oracle plsql

我要问的问题已经存在。但我没有答案。

请参阅以下链接。 ORACLE TRIGGER INSERT INTO ... (SELECT * ...)

我在表格中有大约600列。在此表中的每次插入后,我需要在另一个备份表中插入新行

请告诉我们如何在触发器中使用“INSERT INTO TABLE_NAME2 SELECT * FROM TABLE_NAME1”查询。

注意:不指定insert或select子句中的列

两个表的结构相同。在触发器中指定所有列名称很困难,如果添加了新列,我们还需要添加触发器。

2 个答案:

答案 0 :(得分:0)

    SQL> CREATE or REPLACE TRIGGER emp_after_insert AFTER INSERT ON emp
FOR EACH ROW
DECLARE
BEGIN
insert into emp_backup values (:new.empid, :new.fname, :new.lname);
DBMS_OUTPUT.PUT_LINE('Record successfully inserted into emp_backup table');
END;

参考: http://www.tech-recipes.com/rx/19839/oracle-using-the-after-insert-and-after-update-triggers/

答案 1 :(得分:-2)

你应该使用COMPOUND TRIGGER。此触发器应如下所示:

CREATE OR REPLACE TRIGGER t_copy_table1
FOR INSERT ON table1
COMPOUND TRIGGER
    v_id number;

BEFORE EACH ROW IS
BEGIN
    v_id := :new.id;
END BEFORE EACH ROW;

AFTER STATEMENT IS
BEGIN 
    insert into table2 select * from table1 where id=v_id;
END AFTER STATEMENT;
END t_copy_table1;