创建或重命名动态表teradata

时间:2018-06-14 08:54:04

标签: teradata

我想用current_date创建或重命名表。

例如:

1)创建表格TABLENAME || CURRENT_DATE

2)将TABLE_NAME重命名为TABLE_NAME_ || CURRENT_DATE。

我该怎么办?你能举个例子吗?

2 个答案:

答案 0 :(得分:1)

这会将当前日期以YYYYMMDD格式附加到表名称。如果YYYYMMDD已经附加到名称,则它将替换为新日期。

REPLACE PROCEDURE rename_table_yyyymmdd
(
  IN db_name VARCHAR(128) CHARACTER SET Unicode,
  IN tbl_name VARCHAR(128) CHARACTER SET Unicode, -- defaults to current database
  OUT msg VARCHAR(600) CHARACTER SET Unicode
) SQL SECURITY INVOKER
BEGIN
   DECLARE old_name VARCHAR(261)  CHARACTER SET Unicode; 
   DECLARE new_name VARCHAR(261)  CHARACTER SET Unicode;

   DECLARE sql_stmt VARCHAR(600)  CHARACTER SET Unicode;

   SET old_name  = '"' || Coalesce(db_name,DATABASE) || '"."' 
                       || Coalesce(tbl_name, '') || '"';

   SET new_name  = '"' || Coalesce(db_name,DATABASE) || '"."' 
                                -- remove an  existing "_YYYYMMDD" at the end of the table name
                       || Coalesce(RegExp_Replace(tbl_name, '_[0-9]{8}$'),'')    
                       || '_' || To_Char(Current_Date, 'yyyymmdd') || '"';

   SET sql_stmt = 'RENAME TABLE ' || old_name || ' AS ' || new_name || ';'; 

   EXECUTE IMMEDIATE sql_stmt;

   SET msg = 'Table ' || old_name || ' renamed to ' || new_name;

END;

CALL rename_table_yyyymmdd('myDB', 'tablename', msg);
CALL rename_table_yyyymmdd(null, 'tablename', msg);

没有错误处理,只是在错误上失败,例如当你每天运行两次或者表不存在或用户没有Drop Table权限等时

答案 1 :(得分:-3)

第1步:

create table dat
(
saledate CURRENT_DATE
)

第2步:

CREATE TABLE database.new_table AS
database.dat WITH DATA;
You can use sysdate or getdate to get current date.