2017-01-23 143 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的數量相匹配。

希望這能幫助你理解