此刻,我每个月都要重新运行数据选择查询,并在其中创建一个基本表。该表的名称类似于MyDB.MyTable_Current_Date
,因此今天使用YYYYMM日期格式的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>)
您能否通过提供示例代码来帮助我?
答案 0 :(得分:1)
与其最初创建新表select t.*,
(case when min(invitationDate) over (partition by clientId order by invitationDate) =
min(invitationDate) over (partition by clientId, projectId order by invitationDate)
then 0 else 1
end) as InvitedForPreviousProject
from @table t;
并在整个脚本中使用它,不如简单地创建一个具有已知名称的表,例如MyDB.MyTable_201811
。现在,此名称已被使用并重命名为最后一步。
这是现有SP的细微变化,用于将表从MyDB.MyTable_000000
重命名为'..._000000'
:
'..._yyyymmdd'