2

我想确定,我的数据表中没有孩子的孩子。因此,如果我有一个父项 A 和一个子项 B (B.parent = A),并且我尝试将子项 C 插入到项 B (C.parent = B) 中,则此触发器必须阻止它并且将 C 的 parent_id 设置为 A (C.parent = A)。我的桌子上只需要两层(父子),不需要爷爷。

有我的样本,它不起作用:

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 回答