创建或重命名动态表teradata
我想创建或重命名具有当前\u日期的表 例如: 1) 创建表TABLENAME | |当前|日期 2) 将表名称重命名为表名称当前日期 我怎么做?你能举个例子吗?步骤1:创建或重命名动态表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
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(在存储过程中)或客户端变量,表名不能是动态的,请看您的答案再次帮助我解决了动态命名问题。谢谢您。