2012-11-29 48 views
-1

我想创建一个触发器,当我们从nm_employees表中删除值时,会将值输入到表terminate_employees中。我写了触发器,但它不起作用。我的触发器格式是否正确?有任何想法吗?触发器将删除的条目输入到一个新表中 - SQL plus

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; 
+0

“但它似乎不起作用。” - 这不是一个真正的问题。 –

回答

1

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

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

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

你有许多问题:

  • 错误的表名上创建触发器(缺少s
  • instert声明
  • OLD.需要有:前缀后缺少;。即:OLD.name
+0

我的触发声明还给出了一个编译错误 –

+0

CREATE TRIGGER term_employee后nm_employees 删除EACH ROW BEGIN INSERT INTO terminated_employees(te_name,te_dept)VALUES(OLD.name,OLD.dept) END; –

+0

@Nidhin_toms你应该在你的文章中包含错误信息。它会帮助你更快速地得到准确的答案。我只是猜测问题可能是 – Sodved

相关问题