将变量传递给触发器中的插入语句
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;
我想创建一个触发器,每次我在 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;