如何在mysql程序中创建临时表并生成不同的名称?

问题描述 投票:0回答:3

我想创建具有不同表名的临时表。

存储过程不接受输入参数,创建临时表并将表的表名返回为T_1,T_2,T_3 ....

我怎样才能在mysql存储过程中实现它?

mysql stored-procedures
3个回答
0
投票

以下程序应该对您有帮助。但是这种序列生成仅适用于当前的连接会话。但是我希望你可以在临时表上预期它。

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


0
投票

这是完整的例子

MySQL 5.5.32 Fiddle

0
投票

您可以在创建表时使用TEMPORARY关键字。 TEMPORARY表仅对当前会话可见,并在会话关闭时自动删除。这意味着两个不同的会话可以使用相同的临时表名,而不会相互冲突或与现有的同名非TEMPORARY表冲突。 (在删除临时表之前,将隐藏现有表。)要创建临时表,您必须具有CREATE TEMPORARY TABLES特权。

© www.soinside.com 2019 - 2024. All rights reserved.