gpt4 book ai didi

Mysql存储过程: Can't reopen table: 'temporary table' .如何解决这个问题

转载 作者:行者123 更新时间:2023-11-29 21:50:09 25 4
gpt4 key购买 nike

当我调用存储过程时,我已成功执行此过程,但收到错误消息:

Can't reopen table: 'temp1'.

它就像在查询中多次使用的临时表。有什么想法或其他解决方案来解决这个问题吗?

DELIMITER //
CREATE PROCEDURE menu_t1()
BEGIN
CREATE TEMPORARY TABLE if not exists temp1(
object_id VARCHAR(50) NULL,
description VARCHAR(100) NULL,
display_name VARCHAR(60) NULL,
menu_id VARCHAR(40) NULL,
order_seq int NULL,
menu_level int NULL,
link_url VARCHAR(200) NULL,
OrderString VARCHAR(200) NULL
);

insert into temp1 (object_id, description, display_name, menu_id, order_seq, menu_level, link_url, OrderString)
SELECT mp.object_id, mp.description, mp.display_name, mp.menu_id, mp.order_seq, mp.menu_level, mp.link_url,
concat('00',cast((mp.order_seq) as char)) OrderString
FROM ui_menuitem mp
WHERE mp.parent_id is null and mp.menu_id = '1';

select * from temp1;

select * from temp1
union all
select mc.object_id, mc.description, mc.display_name, mc.menu_id, mc.order_seq, mc.menu_level, mc.link_url,
concat(temp1.OrderString,'-',cast((mc.order_seq) as char)) OrderString
from ui_menuitem mc, temp1
where mc.parent_id = temp1.object_id and mc.menu_id = '1';

TRUNCATE TABLE temp1;
DROP TEMPORARY TABLE IF EXISTS temp1;

COMMIT;
END //
DELIMITER ;

这种风格看起来像递归。

谢谢

最佳答案

虽然您已经声明了临时表,但您尚未定义任何有关它的内容,例如列、类型,也没有向其中插入任何数据。您所做的就是声明它,然后执行 select 语句。

您需要通过执行类似的操作来定义表

CREATE TABLE #temp1(
object_id INT,
description VARCHAR(200)
...)

然后像这样将数据插入其中

INSERT INTO #temp1(object_id, description, ...)
SELECT mp.object_id, mp.description, ...

您目前收到错误,因为 temp1 当前没有 OrderString 列。

关于Mysql存储过程: Can't reopen table: 'temporary table' .如何解决这个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33720281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com