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;