我想创建具有不同表名的临时表。
存储过程不接受输入参数,创建临时表并将表的表名返回为T_1,T_2,T_3 ....
我怎样才能在mysql存储过程中实现它?
以下程序应该对您有帮助。但是这种序列生成仅适用于当前的连接会话。但是我希望你可以在临时表上预期它。
delimiter //
drop procedure if exists set_new_temp_table //
create procedure set_new_temp_table()
begin
if( @temp_table_seq_num is null ) then
set @temp_table_seq_num := 1;
end if;
set @temp_table_name := Concat( 'T_', @temp_table_seq_num );
set @sql := concat( 'create temporary table if not exists '
, @temp_table_name
, '( col1 int, col2 varchar(10) )'
);
prepare stmt from @sql;
execute stmt;
drop prepare stmt;
set @temp_table_seq_num := ( cast( @temp_table_seq_num as decimal ) + 1 );
set @sql := null;
end;
//
delimiter ;
select @temp_table_name; -- should return a NULL before first ever call to SP
call set_new_temp_table(); select @temp_table_name;
但@ z zxsw Poi
这是完整的例子
MySQL 5.5.32 Fiddle
您可以在创建表时使用TEMPORARY关键字。 TEMPORARY表仅对当前会话可见,并在会话关闭时自动删除。这意味着两个不同的会话可以使用相同的临时表名,而不会相互冲突或与现有的同名非TEMPORARY表冲突。 (在删除临时表之前,将隐藏现有表。)要创建临时表,您必须具有CREATE TEMPORARY TABLES特权。