-1

nm_employees テーブルから値を削除するときに、terminated_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テーブル内の列であり、新しい値ではありません。すなわち

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

SQL*Plus でshow errors(または) を使用すると、正確なエラーを確認できます。show err

いくつかの問題があります。

  • 作成トリガーのテーブル名が間違っています ( がありませsん)
  • insert;ステートメントの後にありません
  • 接頭辞OLD.が必要です。:すなわち:OLD.name
于 2012-11-29T04:55:50.733 に答える