Como posso criar uma tabela com um nome dinâmico (com base na data_ atual) e fazer referência a ela nas instruções INSER
No momento, tenho que executar novamente a consulta de seleção de dados todos os meses, onde crio uma tabela base. Essa tabela é chamada algo comoMyDB.MyTable_Current_Date
, então hoje seriaMyDB.MyTable_201811
usando o formato de data AAAAM
Em vez de precisar definir o nome manualmente (usando ctrl + h), eu gostaria que isso fosse feito automaticamente. Meu objetivo é que eu possa abrir o SQL e executar a consulta em que a tabela criada éMyTable_YYYYMM
.
ota: eventualmente, também quero deixar o SQL executar automaticamente todos os meses, mas por enquanto esse é um bom primeiro passo para o meu entendiment
Fiz o abaixoprocedimento armazenad. O problema é que, se eu quiser fazer umalter table
ouinsert into
, não posso (ou não sei como) fazer referência à tabela que foi criad
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')
Devo fazer isso usando umprocedimento armazenad ou usando umunção definida pelo usuário?
Seria ideal se eu pudesse simplesmente me referir a alguma função, por exemplo:CREATE TABLE DB.My_UDF(<My_DB>, <My_Table_Name>)
Pode me ajudar fornecendo um exemplo de um exemplo de código?