【问题标题】:Passing a variable to an Insert Statement in trigger将变量传递给触发器中的插入语句
【发布时间】:2018-03-08 03:15:30
【问题描述】:

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

问题是我想将包含 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) 将标识符传递给查询..
  • 感谢您的信息。可以举个例子吗?

标签: sql oracle triggers sqlplus


【解决方案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;

【讨论】:

  • 请解释一下这段代码,你是怎么解决这个问题的?提问者的代码有什么问题?低质量的答案可能会被删除。
  • 我添加了关于如何解决问题以及解决方法的说明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2014-08-22
  • 2011-05-02
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
相关资源
最近更新 更多