В настоящий момент мне приходится каждый месяц перезапускать запрос на выборку, где я создаю одну базовую таблицу.Эта таблица названа примерно как MyDB.MyTable_Current_Date
, поэтому на сегодня это будет MyDB.MyTable_201811
с использованием формата даты ГГГГММ.
Вместо того, чтобы устанавливать имя вручную (используя ctrl + h), я бы хотел, чтобы это делалось автоматически.Моя цель состоит в том, чтобы я мог открыть SQL-запрос и выполнить запрос, для которого создается таблица MyTable_YYYYMM
.
Примечание. В конечном итоге я также хочу, чтобы SQL-сервер запускался автоматически каждый месяц, но сейчасхороший первый шаг для моего понимания.
Я сделал следующую хранимую процедуру .Проблема в том, что если я хочу сделать оператор alter table
или insert into
, я не могу (или не знаю, как) ссылаться на созданную таблицу.
REPLACE PROCEDURE DB.table_yymm
(
IN db_name VARCHAR(128),
tbl_name VARCHAR(128)
)
BEGIN
DECLARE create_name VARCHAR(261)
;
DECLARE sql_stmt VARCHAR(600)
;
SET create_name = db_name || '.' || tbl_name || CAST(
(CURRENT_DATE (FORMAT 'yymm'))
AS CHAR(4)
)
;
SET sql_stmt = 'CREATE TABLE ' || create_name || ' (testvar char(1))' || ';' ;
EXECUTE IMMEDIATE sql_stmt;
END;
CALL prd_work_lm.table_yymm('My_DB', 'My_Table')
Должен ли я сделать это, используя хранимую процедуру или определяемую пользователем функцию ?
Было бы идеально, если бы я мог просто сослаться на какую-то функцию, например: CREATE TABLE DB.My_UDF(<My_DB>, <My_Table_Name>)
Не могли бы вы помочь, предоставив пример примера кода?