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

Passing a variable to an Insert Statement in trigger

我想创建一个触发器,每次我在 table 上插入时 它将在不同模式中对另一个 table 执行另一个插入。

问题是我想将包含 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;

如何正确地将变量的字符串值传递给查询?可能吗?

您不能将变量用于 table 名称或列名,为此您需要使用动态 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;