如何解决错误:错误1442(HY000)无法更新存储的函数/触发器中的表“表名”?

时间:2019-01-04 06:53:39

标签: mysql stored-procedures

我有一个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),我希望一次更新其他数据库我的主数据库正在更新。

1 个答案:

答案 0 :(得分:0)

我了解, 我已经添加了一个触发器,却忘了删除它,这就是为什么我遇到此错误的原因。

相关问题