我有一个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')
我遇到错误
错误1442(HY000):无法更新存储的表'tabOrder Form' 函数/触发器,因为它已被调用的语句使用 此存储的函数/触发器
在函数调用中,我的主数据库是(9fdcb2f441fcdd2e),另外另外两个数据库是(e6d1e768ce7674e8)和(d5d776576c6042b6),我希望一次更新其他数据库我的主数据库正在更新。
答案 0 :(得分:0)
我了解, 我已经添加了一个触发器,却忘了删除它,这就是为什么我遇到此错误的原因。