2017-01-23 145 views
2

触发与INSERT INTO(SELECT * ...)Oracle触发器INSERT INTO ...(SELECT * ...)

我想它。

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;​ 
+2

表T_USER和USER的结构是一样的吗? – Marusyk

+5

“* not working *”不是有效的Oracle错误消息 –

+2

在不指定列列表的情况下使用“insert”被认为是错误的编码风格。正如使用'select *' –

回答

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 ...; 
+0

这应该工作...但不工作:c –

+0

@Edulynch你是什么意思的“不工作”,任何错误?看到我的更新 – Marusyk

+0

似乎是唯一的方法。 TY。 –

1

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

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

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

+0

我想知道如何做“插入”与“选择* ...”在我的工作在MySQL中。 (触发) –

0

它不是你的扳机,但由于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的数量相匹配。

希望这能帮助你理解