【发布时间】:2017-08-11 05:47:38
【问题描述】:
我正在尝试使此触发器起作用。它的作用是,这将在从表及其附属表中删除数据之前执行,然后将删除的数据插入 2 个表(我将其命名为 tb1_arch 和 tb2_arch)。我一直在谷歌搜索可能的修复,但我真的不知道如何使这项工作
CREATE OR REPLACE TRIGGER trig
BEFORE DELETE ON tb1 FOR EACH ROW
FETCH
INSERT INTO tb1_arch VALUES (:old.OrderNum, :old.tb1Date,:old.CustomerName);
DBMS_OUTPUT.PUT_LINE('Data archived.');
END;
触发器是在上面创建的。但是当我添加这一行时
INSERT INTO tb2_arch VALUES (:old.OrderNum, :old.ItemNum, :old.Pieces);
在INSERT INTO tb1_arch VALUES 之后,它给了我一个错误
“第 5 行错误:PLS-00049:绑定变量 'OLD.PIECES' 错误”
任何帮助将不胜感激!
编辑:正如 Vijayakumar 先生所建议的,我做了以下事情:
CREATE OR REPLACE TRIGGER trig
BEFORE DELETE ON tb1
REFERENCING OLD AS old FOR EACH ROW
INSERT INTO tb1_arch VALUES (:old.OrderNum, :old.tb1Date,:old.CustomerName);
INSERT INTO tb2_arch VALUES (:old.OrderNum, :old.ItemNum, :old.Pieces);
DBMS_OUTPUT.PUT_LINE('Data archived.');
END
但是,我仍然遇到同样的错误。
编辑:删除了 FETCH,我仍然遇到同样的问题
CREATE OR REPLACE TRIGGER trig
BEFORE DELETE ON tb1 FOR EACH ROW
INSERT INTO tb1_arch VALUES (:old.OrderNum, :old.tb1Date,:old.CustomerName);
INSERT INTO tb2_arch VALUES (:old.OrderNum, :old.ItemNum, :old.Pieces);
DBMS_OUTPUT.PUT_LINE('Data archived.');
END;
表格如下: 待定1:
create table tb1 (
OrderNum integer NOT NULL primary key,
tb1Date date NOT NULL,
CustomerName varchar2(50) NOT NULL,
--constraints
CONSTRAINT tb1_uc unique (CustomerName)
);
tb2
create table tb2 (
OrderNum integer NOT NULL,
ItemNum integer NOT NULL,
Pieces integer NOT NULL,
--constraints
CONSTRAINT tb2_fk foreign key (OrderNum) references tb1(OrderNum),
);
【问题讨论】:
-
你应该添加参考
REFERENCING OLD AS OLD -
嗨!非常感谢您的回复!我在删除 tb_1 之前执行了以下 CREATE OR REPLACE TRIGGER 触发器,每行都引用旧的但是,我仍然遇到同样的错误!