0

name と id を持つ person テーブルと、属性 who と what を持つログ テーブルがあります。person テーブルを削除または挿入するときに、logs テーブルに挿入したいと考えています。

これは私がこれまでに持っているものです:

CREATE OR REPLACE TRIGGER add_del
  BEFORE INSERT OR DELETE ON persons
  FOR EACH ROW
  BEGIN
    IF INSERTING THEN
      INSERT INTO logs (who, what) VALUES (name, 'Insert into persons');
    ELSE
      INSERT INTO logs (who, what) VALUES (name, 'Delete from persons');
    END IF;
  END;
  /

これがエラーでコンパイルされるのはなぜですか:

警告: トリガーはコンパイル エラーで作成されました。

4

1 に答える 1

2

あなたはエラーを投稿しなかったので、私は推測しなければなりません。私の推測では、問題はname、このコンテキストでは有効な識別子ではないということです。:new.nameまたはのいずれかを参照する必要があります:old.name。 挿入:old.nameされ、削除されますので、次のようなものが必要だと思いますNULL:new.nameNULL

CREATE OR REPLACE TRIGGER add_del
  BEFORE INSERT OR DELETE ON persons
  FOR EACH ROW
BEGIN
  IF INSERTING THEN
    INSERT INTO logs (who, what) VALUES (:new.name, 'Insert into persons');
  ELSE
    INSERT INTO logs (who, what) VALUES (:old.name, 'Delete from persons');
  END IF;
END;
于 2012-12-07T02:38:32.213 に答える