-1

我正在尝试创建一个触发器,当我们从 nm_employees 表中删除值时,该触发器会将值输入到表 terminate_employees 中。我已经编写了触发器,但它不起作用。我的触发器格式正确吗?有任何想法吗?

CREATE TABLE nm_departments(
dept2 varchar(20),
CONSTRAINT empPK PRIMARY KEY (dept2)
);

CREATE TABLE nm_employees(
name varchar(20),
dept varchar(20),
CONSTRAINT departments FOREIGN KEY (dept) REFERENCES nm_departments (dept2)ON DELETE         CASCADE
);

CREATE TABLE terminated_employees(
te_name varchar(20),
te_dept varchar(20)
);


CREATE TRIGGER term_employee AFTER DELETE ON nm_employee
FOR EACH ROW
BEGIN
INSERT INTO terminated_employees (NEW.te_name, NEW.te_dept) VALUES  (OLD.name,OLD.dept)
END;
4

1 回答 1

1

您不应该在语句NEW.的列名上指定 。INSERT这些是表中的列terminated_employees,而不是新值。IE

INSERT INTO terminated_employees (te_name, te_dept)
VALUES  (OLD.name,OLD.dept)

您可以在 SQL*Plus 中使用show errors(或) 来查看确切的错误。show err

你有很多问题:

  • 创建触发器上的表名错误(缺少s
  • ;插入语句后丢失
  • OLD.需要有前缀:。IE:OLD.name
于 2012-11-29T04:55:50.733 回答