Как написать процедуру создания таблицы путем ввода переменной даты? - PullRequest
0 голосов
/ 02 августа 2020

Цель

Я хочу создать следующую таблицу, формат имени таблицы - 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 - Неизвестный столбец «tab_name» в «списке полей»

1 Ответ

1 голос
/ 02 августа 2020

У вас есть синтаксическая ошибка в вашем коде, однако желательно следующее. Измените структуру таблицы по своему усмотрению.

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');
...