2017-01-23 6 views
2

トリガー(*選択...)にORACLE TRIGGER 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; 

を使用すると、別のテーブルから1つのまたは複数の行を選択したい場合は、この構文を使用する必要があります。

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

参照してくださいこれは動作する必要がありますが、動作していない:c –

+0

@Edulynch "作業していない"とは何か、何かエラーがありますか?私の更新を参照してください – Marusyk

+0

唯一の方法と思われる。 ty。 –

1

実際に発生したエラーを投稿する可能性がありますか?

また、あなたのアプローチを再考することをお勧めします。 DMLを含むトリガーでは、あらゆる種類の問題が発生します。 Oracle Databaseではトリガーを再起動する必要があるため、特定の行に対してDMLを複数回実行できる可能性があります。

代わりに、関連するすべてのDML文をPL/SQLプロシージャにまとめて呼び出してください。

+0

私はmysqlで私のために働いた "select * ..."で "insert"をする方法を知りたい。 (引き金) –

0

そのないあなたのトリガーについてもののので、INSERT文の

ここの文は、値の数が言及columsnの数と一致している必要があり

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>; 

次のように動作します挿入します。

ご希望の場合はこちらをご確認ください。

関連する問題