将变量传递给触发器中的Insert语句

时间:2017-09-26 19:18:07

标签: sql oracle triggers sqlplus

我希望每次在表格上插入时都会创建一个触发器 它将在differt模式中的另一个表上执行另一个插入。

问题是我想将包含che schema.table的变量传递给insert的查询。 但是当我尝试做的时候,我有一个错误。这就是我写的:

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 个答案:

答案 0 :(得分: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;
相关问题