创建或重命名动态表teradata

创建或重命名动态表teradata,teradata,Teradata,我想创建或重命名具有当前\u日期的表 例如: 1) 创建表TABLENAME | |当前|日期 2) 将表名称重命名为表名称当前日期 我怎么做?你能举个例子吗?步骤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. 这会将Y

我想创建或重命名具有当前\u日期的表

例如:

1) 创建表TABLENAME | |当前|日期

2) 将表名称重命名为表名称当前日期

我怎么做?你能举个例子吗?

步骤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.

这会将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);

无错误处理,只会因错误而失败,例如,当您一天运行两次,或者该表不存在,或者用户没有删除表的权限,等等。

当前日期应是表名的一部分。如果没有动态SQL(在存储过程中)或客户端变量,表名不能是动态的,请看您的答案再次帮助我解决了动态命名问题。谢谢您。