mysql更新触发器先插入另一张表然后删除该条数据
16lz
2021-01-22
如题:mysql更新触发器先插入另一张表然后删除该条数据
删除数据时会报错,报错内容:Can'tupdatetable'tb_carparkinoutrecord'instoredfunction/triggerbecauseitisalreadyusedbystatementwhichinvokedthisstoredfunction/trigger
请问这个应该怎么处理,我把删除语句放在tb_carparkinoutrecord_history表的插入触发器中也不行。在线等。。
如果你在触发器里面对刚刚插入的数据进行了insert/update,则出现这个问题。因为会造成循环的调用.
可以另外创建过程完成需求
droptriggerifexiststrigger_tb_carparkinoutrecord_update;
CREATETRIGGERtrigger_tb_carparkinoutrecord_updateAFTERUPDATEONtb_carparkinoutrecord
FOREACHROW
BEGIN
IF@disable_triggerISNULLTHEN
IFnew.ProcessingTypenotin('未处理主记录','未处理辅记录')THEN
INSERTINTOtb_carparkinoutrecord_historySELECTtemp_tb_carparkinoutrecord.*,
(CASEWHEN(isnull(b.CarOwnerName)OR(b.CarOwnerName=''))THEN'临时车'ELSEb.CarOwnerNameEND)ASCarOwnerName
,(CASEWHEN(isnull(c.GroupName)OR(c.GroupName=''))THEN''ELSEc.GroupNameEND)ASGroupName,
(SELECTGetParentGroupName(b.CarGroupGuid)ASExpr1)ASFullGroupName
FROM
(SELECT*FROMtb_carparkinoutrecordasawherea.guid=new.guid)astemp_tb_carparkinoutrecord
LEFTJOINtb_carinfoasbon((temp_tb_carparkinoutrecord.InCarNO=b.CarNo)AND(temp_tb_carparkinoutrecord.CarColor=b.CarColor))
LEFTJOINtb_cargroupascon(b.CarGroupGuid=c.guid);
IFROW_COUNT()>0THEN
DELETEFROMtb_carparkinoutrecordWHEREguid=new.guid;
ENDIF;
ENDIF;
SET@disable_trigger=NULL;
ENDIF;
END
删除数据时会报错,报错内容:Can'tupdatetable'tb_carparkinoutrecord'instoredfunction/triggerbecauseitisalreadyusedbystatementwhichinvokedthisstoredfunction/trigger
请问这个应该怎么处理,我把删除语句放在tb_carparkinoutrecord_history表的插入触发器中也不行。在线等。。
4 个解决方案
#1
如果你在触发器里面对刚刚插入的数据进行了insert/update,则出现这个问题。因为会造成循环的调用.
可以另外创建过程完成需求
更多相关文章
- oracle基础知识总结 part 3 : 三范式,PLSQL,存储过程,函数,触发器
- PHP mysql_fetch_array得不到数据
- SQL SERVER 2005 数据库对比工具,并自动生成更新SQL脚本
- Python自动化拉取Mysql数据并装载到Oracle
- 如何将A表查出来的数据放到B表中
- C# 往SQL数据库插入listbox的值
- C#使用SqlBulkCopy将DataTable写入数据库的表中(表不存在则创建新
- 高分求解:如何每天将本地的sybase的数据导入到internet上的sql se
- MySQL数据库阶段学习目录