2012-11-29 64 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

相關問題