mysql - 如何解决错误:ERROR 1442 (HY000) Can't update table 'table name' in stored function/trigger?
问题描述
我有一个 mysql 程序,它将记录从一个主数据库更新到其他数据库:以下是我的程序
DELIMITER $$
CREATE PROCEDURE order_update (vmasterdb varchar(200),vdbnamelist VARCHAR(8000),tbl_name varchar(200),form_id varchar(200))
BEGIN
DECLARE dbnamelist VARCHAR(8000);
DECLARE pos int;
DECLARE dbname VARCHAR(100);
SET dbnamelist=vdbnamelist;
WHILE LENGTH(dbnamelist) > 0 DO
SET pos = INSTR(dbnamelist,',') ;
SET dbname = (CASE WHEN pos>0 THEN SUBSTRING(dbnamelist, 1, pos-1) else SUBSTRING(dbnamelist, 1) END);
IF tbl_name='tabOrder Form' THEN
SET @myCommand := concat('
UPDATE ',vmasterdb,'.`tabOrder Form` b
JOIN ',dbname,'.`tabOrder Form` a
ON a.name = b.name
SET
a.docstatus = b.docstatus,
a.parent = b.parent,
a.parentfield = b.parentfield,
a.order_calculation = b.order_calculation,
a.custom_customer = b.custom_customer
WHERE a.name=?');
PREPARE myStatement FROM @myCommand;
SET @c1 =form_id;
EXECUTE myStatement USING @c1;
DEALLOCATE PREPARE myStatement;
END IF;
if pos=0 then
SET dbnamelist =null;
else
SET dbnamelist = SUBSTRING(dbnamelist, pos+1, LENGTH(dbnamelist)-pos);
SET pos=0;
end if;
END WHILE;
END$$
DELIMITER ;
当我使用以下函数调用此过程时
call generic_update_ord ('9fdcb2f441fcdd2e','e6d1e768ce7674e8,d5d776576c6042b6','tabOrder Form','ORD-00012')
我收到错误
ERROR 1442 (HY000): Can't update table 'tabOrder Form' in stored function/trigger 因为它已被调用此存储函数/触发器的语句使用
在我的函数调用中,我的主数据库是(9fdcb2f441fcdd2e),另外两个数据库是(e6d1e768ce7674e8)和(d5d776576c6042b6),我希望在我的主数据库更新后更新其他数据库。
解决方案
我明白了,我已经添加了一个触发器,但我忘了删除它,这就是我收到此错误的原因。
推荐阅读
- unix - 如何将 sed 命令放入 while 循环中?
- json4s - JsonMethods 不是包 org.json4s.jackson 的成员
- json - Angular 项目未显示为 Chrome 扩展程序
- compilation - 创建静态链接共享库
- javascript - 被过滤的 AG-Grid 行未正确呈现
- python - 使用 Python 3 打开 Jupyter Notebook
- homebrew - 您是否在 Formular 中指定平台/拱门
- php - 是否可以更改二进制发行版的 PHP 配置选项(不是从源代码构建 PHP?)
- node.js - 为什么我的 Node.js 服务在 GraalVM 下意外停止?
- automic - 将 Automic 配置为仅在一定数量的作业失败后发送警报?