如何编写程序通过输入可变日期来创建 table?

How to write a procedure to create table by inputting a variable date?

目标

我想创建 table 如下, table 名称的格式是 tbl+_+date ,但我想写输入给定日期时创建的程序。

drop table if exists tbl_20200802 ;
create table tbl_20200802 (index (USERID) )
select * from a;

尝试

DELIMITER //
DROP PROCEDURE IF EXISTS pro_ljj_push_pre_id;
CREATE PROCEDURE pro_ljj_push_pre_id(
    IN test_date date
)
BEGIN
set @table_name=CONCAT('tbl_', test_date);


SET @t1 =CONCAT(
                            'drop table if exists '
                                ,@table_name 
                                ,';'
                                ,'\n'
                                ,'create table ', tab_name
                                , ' (index (USERID))'
                                ,'\n'
                                ,'SELECT * FROM a');
 PREPARE stmt3 FROM @t1;
 EXECUTE stmt3;
 DEALLOCATE PREPARE stmt3;
-- 
END //
DELIMITER ;

CALL pro_ljj_push_pre_id('20200802');

1054 - Unknown column 'tab_name' in 'field list'

您的代码中存在一些语法错误, 但是,以下是您想要的。根据需要更改 table 的结构。

DELIMITER $$
DROP PROCEDURE IF EXISTS pro_ljj_push_pre_id$$
CREATE PROCEDURE pro_ljj_push_pre_id(IN test_date VARCHAR(50))
BEGIN
set @table_name=CONCAT('tbl_', test_date);

 SET @t1 =CONCAT('drop table if exists ',@table_name);
 SELECT @t1;
 PREPARE stmt3 FROM @t1;
 EXECUTE stmt3;
 DEALLOCATE PREPARE stmt3;
 SET @t2 =CONCAT('create table ', @table_name, ' (id INT PRIMARY KEY, name VARCHAR(30));');
 SELECT @t2;
 PREPARE stmt4 FROM @t2;
 EXECUTE stmt4;
 DEALLOCATE PREPARE stmt4;
-- 
END $$
DELIMITER ;

CALL pro_ljj_push_pre_id('20200802');