Teradata重命名表(如果存在)

时间:2015-07-13 15:39:52

标签: rename teradata exists

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

特别是:

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

在Sql Server中:

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

在Oracle中:

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制作它,

谢谢

的Fabio

3 个答案:

答案 0 :(得分:1)

这个怎么样?

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;

答案 1 :(得分:1)

更改了@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. 旧表名称
  2. 新表名称
  3. 数据库名称
  4. call FAR.RENAME_TABLE('TEST_ABC','TEST_11','FAR')

答案 2 :(得分:0)

假设您使用的是相对现代版的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;