2017-01-23 4 views
2

-Trigger mit Insert in (select * ...)ORACLE TRIGGER INSERT INTO ... (SELECT * ...)

ich bin versucht.

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

nicht funktioniert ...

diese Arbeit.

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

Auslöser

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

Struktur der Tabellen T_USER und USER ist die gleiche? – Marusyk

+5

"* nicht funktioniert *" ist keine gültige Oracle-Fehlermeldung –

+2

Die Verwendung von 'Einfügen' ohne Angabe einer Spaltenliste wird als fehlerhafter Codierungsstil angesehen. Wie mit 'Select *' –

Antwort

1

diese Arbeit.

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

Also, wenn es Ihnen passt dann diese versuchen:

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

Wenn Sie eine auswählen möchten oder mehrere Zeilen aus einer anderen Tabelle, haben Sie diese Syntax verwenden:

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

das sollte funktionieren ... aber nicht funktioniert: c –

+0

@Edulynch Was meinst du mit "funktioniert nicht", irgendwelche Fehler? Siehe mein Update – Marusyk

+0

Scheint der einzige Weg zu sein. ty. –

1

Vielleicht könnten Sie den tatsächlichen Fehler posten, den Sie erleben?

Auch schlage ich vor, dass Sie Ihren Ansatz überdenken. Auslöser, die DML enthalten, führen zu allen möglichen Problemen. Beachten Sie, dass Oracle Database möglicherweise einen Trigger neu starten muss und daher Ihre DML für eine bestimmte Zeile mehrmals ausführen könnte.

Geben Sie stattdessen alle zugehörigen DML-Anweisungen in einer PL/SQL-Prozedur zusammen und rufen Sie diese auf.

+0

Ich möchte wissen, wie man die "Einfügung" mit dem "auserwähltes * ..." tut, das für mich in mysql arbeitete. (auslösen) –

0

Es geht um den Trigger nicht aber wegen der INSERT-Anweisung

hier einfügen Anweisung wie unten

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

Die Anzahl der Werte arbeitet erwähnt mit der Anzahl der columsn übereinstimmen sollte.

Hoffe dies hilft Ihnen zu verstehen

Verwandte Themen