将变量传递给触发器中的插入语句
问题描述:
我想创建一个触发器,每当我在表上插入一个插入文件时 它将在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;
我该如何正确传递变量到查询的字符串值?可能吗?
答
您不能使用变量作为表名或列名,您需要为此使用动态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;
你需要使用动态SQL('执行immediate')来标识进入查询.. –
感谢您的信息。有没有可能有一个例子? – NxA