Teradata 重命名 table(如果存在)

Teradata rename table if exists

我正在使用 Teradata。如果满足特定条件,我想用脚本 sql 重命名 table 而不是使用 bteq。

特别是:

如果 TABLE_A 存在 => 将 table TABLE_B 重命名为 TABLE_B_OLD

在 Sql 服务器中:

IF OBJECT_ID('TABLE_A', 'U') IS NULL
 EXEC sp_rename 'TABLE_B', 'TABLE_B_OLD'; 

在甲骨文中:

DECLARE
        cnt NUMBER;
        BEGIN 
            select COUNT(*) INTO cnt from sys.user_tables where table_name = 'TABLE_A'

            IF cnt>0 THEN
                execute immediate 'rename table TABLE_B to TABLE_B_OLD';
            END IF;
        END;  

如何使用 Teradata 实现,

谢谢

法比奥

假设您使用的是相对较新的 Teradata 版本,您可以在 SQL Assistant(或 BTEQ)中执行此操作:

select
count (*)
from
dbc.tablesv where tablename = '<your table>'
and databasename = '<your db>'
having count (*) > 0;

.if activitycount = 1  then .GOTO RenameTable;
.if activitycount <> 1  then .quit;

.LABEL RenameTable

rename table <your table> <your new name;

这个怎么样?

REPLACE PROCEDURE IF_EXISTS_RENAME
(
IN table_name VARCHAR(30),
IN new_table_name VARCHAR(30)
)
BEGIN

IF EXISTS(SELECT 1 FROM dbc.tables WHERE 1=1 AND tablename = table_name and databasename=DATABASE) THEN
  CALL DBC.SysExecSQL('RENAME TABLE ' || table_name ||' to '|| new_table_name);
END IF;

END;

更改了@access_granted 提供的代码以将数据库名称作为变量包含在内

REPLACE PROCEDURE FAR.RENAME_TABLE 
(
IN table_name VARCHAR(30),
IN new_table_name VARCHAR(30),
IN db_name VARCHAR(50)
)
BEGIN
    declare my_sql VARCHAR(1000);

    IF EXISTS(SELECT 1 
             FROM dbc.tables 
             WHERE 1=1 AND tablename = table_name and databasename= db_name) 
    THEN
        set my_sql ='RENAME TABLE ' || table_name ||' to '||      new_table_name||';' ;
        EXECUTE IMMEDIATE my_sql;
    END IF;

END;

使用三个参数调用过程:

  1. 旧Table名字
  2. 新Table姓名
  3. 数据库名称

call FAR.RENAME_TABLE('TEST_ABC','TEST_11','FAR')