2017-09-26 124 views
-1

我想創建一個觸發器,每當我在表上插入一個插入文件時 它將在differt模式中的另一個表上執行另一個插入操作。將變量傳遞給觸發器中的插入語句

問題是我想將包含che schema.table的變量傳遞給插入查詢。 但是,當我嘗試做,我有一個錯誤。這是我寫:

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; 

我該如何正確傳遞變量到查詢的字符串值?可能嗎?

+1

你需要使用動態SQL('執行immediate')來標識進入查詢.. –

+0

感謝您的信息。有沒有可能有一個例子? – NxA

回答

1

您不能使用變量作爲表名或列名,您需要爲此使用動態SQL。通過保持你的語句中的綁定變量和使用EXECUTE IMMEDIATE您可以變通方法:

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

請提供關於此代碼的一些解釋,您是如何解決此問題的?問題提問者代碼中的問題是什麼?低質量的答案可能會被刪除。 – Graham

+0

我補充說明了如何解決問題以及如何解決問題。 –

+0

非常好,謝謝。 – Graham