我在程序中创建了临时表,如下所示。
create temporary table tmp_table
(
id int,
idate date,
iname varchar(100)
)
insert into tmp_table
select dept_no, dept_create_date,dept_name from dept_record_2016
union all
select dept_no, dept_create_date,dept_name from dept_record_2017;
select * from tmp_table;
insert into tmp_table
select emp_no , date_of_join , emp_full_name from emp_info;
我得到以下错误ERROR 1137:无法重新打开表:'tmp_table'。
那么如何使用单个临时表多次在程序中使用相同的临时表?
有替代解决方案吗?
答案 0 :(得分:0)
编辑:
当我尝试使用此过程重现您的问题时,我无法重现它。对我来说非常好。
delimiter $$
create procedure whatever()
begin
create temporary table tmp_table (a int, b int);
insert into tmp_table
select * from a
union all
select * from b;
select * from tmp_table;
insert into tmp_table
select * from c;
end $$
delimiter ;
call whatever();
更详细地描述您的问题!并尝试隔离何时出现错误消息。
原始回答:
我想你的问题是:
TEMPORARY表仅对当前会话可见,而且是 会话关闭时自动删除。这意味着两个 不同的会话可以使用相同的临时表名称 相互冲突或与现有的非TEMPORARY表冲突 同名。 (现有表隐藏到临时表之前 被丢弃了。)