使用插入触发(选择* ...)
我正在尝试。
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;
答案 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数量相匹配。
希望这有助于您理解