ORACLE TRIGGER INSERT INTO ...(选择* ...)

时间:2017-01-23 19:40:48

标签: sql oracle plsql

使用插入触发(选择* ...)

我正在尝试。

INSERT INTO T_ USERS SELECT * FROM USERS WHERE ID = :new.ID;

无法正常工作......

这项工作。

INSERT INTO T_USERS(ID) VALUES(:new.ID);

触发

create or replace trigger "TRI_USER"
AFTER
insert on "USER"
for each row
begin
INSERT INTO T_USER SELECT * FROM USER WHERE ID = :new.ID;
end;​

3 个答案:

答案 0 :(得分:1)

  

这项工作。

     

INSERT INTO T_USERS(ID) VALUES(:new.ID);

所以,如果它适合你,那么试试这个:

INSERT INTO T_USER(ID) SELECT ID FROM USER WHERE ID = :new.ID;

如果要从另一个表中选择一行或多行,则必须使用以下语法:

insert into <table>(<col1>,<col2>,...,<coln>)
select <col1>,<col2>,...,<coln>
from ...;

答案 1 :(得分:1)

也许您可以发布您遇到的实际错误?

另外,我建议你重新考虑一下你的做法。包含DML的触发器会引入各种问题。请记住,Oracle数据库可能需要重新启动触发器,因此可能会针对特定行多次执行DML。

相反,将所有相关的DML语句放在PL / SQL过程中并调用它。

答案 2 :(得分:0)

它不是关于你的触发器,而是因为INSERT语句

这里insert语句的工作原理如下

INSERT INTO <TABLE>(COL1,COL2,COL3) VALUES (VAL1,VAL2,VAL3);  --> If trying to populate value 1 by one.

INSERT INTO <TABLE>(COL1,COL2,COL3) --> If trying to insert mult vales at a time
SELECT VAL1,VAL2,VAL3 FROM <TABLE2>;

值的数量应与提到的columsn数量相匹配。

希望这有助于您理解