我要问的问题已经存在。但我没有答案。
请参阅以下链接。 ORACLE TRIGGER INSERT INTO ... (SELECT * ...)
我在表格中有大约600列。在此表中的每次插入后,我需要在另一个备份表中插入新行。
请告诉我们如何在触发器中使用“INSERT INTO TABLE_NAME2 SELECT * FROM TABLE_NAME1”查询。
注意:不指定insert或select子句中的列
两个表的结构相同。在触发器中指定所有列名称很困难,如果添加了新列,我们还需要添加触发器。
答案 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;