【发布时间】:2016-09-16 02:41:19
【问题描述】:
大家好,我正在尝试做一个触发器来更新一个表中的信息,但是这个表有信息,这个信息来自这个过程存储
create or replace procedure insertar (new_bod int, new_arti int, cant int)
BEGIN
INSERT INTO bod_arti (bod_id, arti_id, cant)
VALUES (new_bod , new_arti, new_cant);
END
在此过程中,当我尝试插入调用该过程的值时,bod_id 是 BOD 表中的 PK,arti_id 是 ARTI 表中的 PK,我有一个错误,这是因为 PK 相同。 我怎样才能在表中只插入不能并添加信息?我有这个触发器
create trigger myfirsttrigger BEFORE INSERT ON bod_arti
FOR EACH ROW
UPDATE bod_arti SET cant = cant + NEW.cant WHERE bod_id = NEW.bod_id AND arti_id = NEW.arti_id
当我使用已经插入的值再次调用该过程时,出现此错误
1442 - 无法更新存储函数/触发器中的表“bod_arti”,因为它已被调用此存储函数/触发器的语句使用。
我能做什么? 谢谢!
【问题讨论】:
-
你要更新什么表?
-
在使用触发器插入时,您不能在其表本身上更新表
-
您可以使用存储过程在触发器内部进行更新。
-
不清楚您要达到的目标。您是否尝试通过执行 INSERT 向表中添加一行,并且您还想使用与插入的新行匹配的
(bod_id,art_id)值更新表中的所有行?很奇怪。表上是否有唯一约束?如果(bod_id,arti_id)是唯一的,我怀疑您可能正在寻找INSERT .. ON DUPLICATE KEY的行为。但我只是猜测,因为从这个问题来看,根本不清楚你需要做什么。 -
你能做的就是更好地解释你想要达到的目标。表中的样本数据、正在插入的样本数据以及结束状态,即操作后您希望表包含的内容。返回的错误消息是 MySQL 中的限制。在 BEFORE INSERT 触发器的上下文中,不可能对同一个表执行 UPDATE。
标签: mysql stored-procedures triggers plsqldeveloper