您可以创建由 SYSDBA 或其他具有足够权限的管理员级别用户拥有的存储过程,DROP TABLE
该用户具有CREATE TABLE
执行以下操作的权限:
- 检查 DBC.Tables 以查看对象是否存在。
- 如果对象存在,则删除它。
- 运行 DDL 以重新创建表:
CREATE TABLE <TargetDB>.<TargetTable> AS <SourceDB>.<SourceTable> WITH DATA AND STATS;
您可以通过接受有关是否应将数据和/或统计信息复制到新表的附加参数来使其更具动态性。
如果您使用的是 BTEQ,您可以执行类似的操作(BTEQ 命令语法可能有点偏差,但足够接近以理解要点):
SELECT 1
FROM DBC.TABLES
WHERE DatabaseName = '<TargetDB>'
AND TableName = '<TargetTable>'
AND TableKind = 'T' /* Make sure it is in fact a table, not a view, macro etc */
.IF ACIVITYCOUNT = 0 THEN GOTO CreateNewTable;
DROP TABLE <TargetDB>.<TargetTable>;
.IF ERRORCODE = 3807 THEN GOTO CreateNewTable; /* Table dropped by another process? */
.IF ERRORCODE > 0 THEN .QUIT ERRORCODE; /* Unexpected error */
.LABEL CreateNewTable;
CREATE <TargetDB>.<TargetTable> AS <SourceDB>.<SourceTable> WITH DATA AND STATISTICS;