2017-09-26 122 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