我希望每次在表格上插入时都会创建一个触发器 它将在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;
如何正确地将变量的字符串值传递给查询?有可能吗?
答案 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;