2

私のデータテーブルに子供の子供がいないことを確認したいです。したがって、親アイテム A と子アイテム B (B.parent = A) があり、子アイテム C をアイテム B (C.parent = B) に挿入しようとすると、このトリガーはそれを防止する必要があり、 C のparent_id を A に設定します (C.parent = A)。テーブルには 2 つのレベル (親子) しか必要なく、おじいちゃんは必要ありません。

私のサンプルがありますが、うまくいきません:

DELIMITER //
CREATE TRIGGER parent_control BEFORE insert ON reports
FOR EACH ROW BEGIN
IF new.parent_id is not null THEN
  set @parent_parent_id = new.parent_id;
  SELECT parent_id FROM reports INTO parent_parent_id WHERE report_id = new.parent_id;
  IF @parent_parent_id is not null THEN
    SET new.parent_id = @parent_parent_id;
  END IF;
END IF;
END; 

#1327 - 宣言されていない変数:parent_parent_id

4

1 に答える 1

0

フィールド名やデータ型などをチェックしたいかもしれませんが、このようなものがうまくいくかもしれません

delimiter #

create trigger reports_before_ins_trig before insert on reports
for each row
proc_main:begin

declare pid smallint unsigned default null;

  if new.parent_id is null then
    leave proc_main;
  end if;

  select parent_id into pid from reports where report_id = new.parent_id;

  if pid is not null then 
    set new.parent_id = pid;
  end if;

end proc_main #

delimiter ;
于 2010-08-20T15:00:49.673 に答える