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;
使用三个参数调用过程:
- 旧Table名字
- 新Table姓名
- 数据库名称
call FAR.RENAME_TABLE('TEST_ABC','TEST_11','FAR')
我正在使用 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;
使用三个参数调用过程:
- 旧Table名字
- 新Table姓名
- 数据库名称
call FAR.RENAME_TABLE('TEST_ABC','TEST_11','FAR')