2017-09-26 5 views
-1

Ich möchte einen Trigger erstellen, dass jedes Mal, wenn ich eine Einfügung in einer Tabelle habe, eine andere Einfügung in einer anderen Tabelle in einem anderen Schema durchführen.Übergabe einer Variablen an eine Insert-Anweisung in Trigger

Das Problem ist, dass ich eine Variable, die che schema.table enthalten möchten, an die Abfrage für die Einfügung übergeben. Aber wenn ich versuche, habe ich einen Fehler. Dies ist, was ich geschrieben habe:

CREATE OR REPLACE TRIGGER TRIGGER_TEST 
AFTER INSERT ON MYTABLE 
FOR EACH ROW 
DECLARE 
test VARCHAR2(128); 
BEGIN 
test := "myschema.mytable2" 

Insert into test (a, b, c) 
VALUES(:new.a,:new.b,:new.c); 
END; 

Wie kann ich richtig die Zeichenfolge Wert der Variablen auf die Abfrage übergeben? Ist es möglich?

+1

Sie müssen dynamischen SQL verwenden ('ausführen immediate') eine Kennung in eine Abfrage zu übergeben .. –

+0

Vielen Dank für Ihre Informationen. Ist es möglich, ein Beispiel zu haben? – NxA

Antwort

1

Sie können keine Variable für einen Tabellennamen oder einen Spaltennamen verwenden, dafür müssen Sie dynamisches SQL verwenden. die Bindevariablen in Ihrer Erklärung Indem und SOFORT mit EXECUTE können Sie umgehen, dass:

CREATE OR REPLACE TRIGGER TRIGGER_TEST 
AFTER INSERT ON MYTABLE 
FOR EACH ROW 
DECLARE 
test VARCHAR2(128); 
BEGIN 
test := "myschema.mytable2" 

EXECUTE IMMEDIATE 'Insert into ' || test || ' (a, b, c) VALUES(:1,:2,:3)' USING :new.a,:new.b,:new.c; 
END; 
+0

Bitte erläutern Sie den Code, was haben Sie getan, um das Problem zu lösen? Was war das Problem im Code des Fragestellers? Antworten mit geringer Qualität können gelöscht werden. – Graham

+0

Ich habe eine Klarstellung hinzugefügt, wie das Problem gelöst werden kann und wie ich es behoben habe. –

+0

Ausgezeichnet, danke. – Graham

Verwandte Themen