2017-12-29 21 views
2

Pythonスクリプトの一部として、私は、コードの残りの部分は、メインテーブルを更新する前にバックアップコピーを作成するために、3次のSQL文を実行しています:テーブルDB2を作成または置換しますか?

​​

これはどこの場合を除いて正常に動作しますテーブルTABLEAU.TESTTABLEJBCOPYは存在しません。

私が使用して試してみました

:[IBM] [CLIドライバー] [DB2/LINUXX8664] SQL0104N予期しないトークン "TABLE":しかし、それは

例外エラーを引き上げ続け

CREATE OR REPLACE TABLE TABLEAU.TESTTABLEJBCOPY LIKE TABLEAU.TESTTABLEJB; 
INSERT INTO TABLEAU.TESTTABLEJBCOPY (SELECT * FROM TABLEAU.TESTTABLEJB); 

を"CREATE OR REPLACE"の後に見つかりました。予想されるトークンには、「TYPE」が含まれます。 SQLSTATE = 42601 SQLCODE = -104

どのように処理するかわかりません。

また、テーブルを削除しようとする前にテーブルが存在しないかどうかを確認するより良い方法があります。

ありがとう

+0

単純にすべての行を削除しないでください。 –

+0

@ Dan Bracukスクリプトは常にこれらのテーブルを使用して実行されるとは限りません。そのため、コピーテーブルは行を削除するために必ずしも存在するとは限りません。したがって、なぜ私は作成またはスタイル機能を置き換える必要があります。 – Josh

+0

@Josh - ダンがやっていたことは、「データベース作成時にテーブルを作成し、それを使用する場合はテーブルを最初にクリアする」ことです。 –

答えて

0

削除する前に表が存在することを確認してください。

原子を自動インラインで考える

BEGIN ATOMIC     
IF(EXISTS(     
SELECT 1 FROM tables   
WHERE TABLE_SCHEMA = 'mylib' 
AND TABLE_NAME = 'mytable' 
)) THEN      
DROP table mylib.mytable; 
END IF;      
END; 
0

Db2の「テーブルの作成または置き換え」のような構文はありません。 最初にテーブルを削除し(存在しない場合は警告を無視して)、テーブルを作成する必要があります。 表が存在しない場合は、ドロップ表の障害に対応するSQLステートを無視するようにスクリプトを作成できます。

テーブルを削除する前にテーブルが存在する場合は、クエリを実行するようにSQLを複合することもできます。これは頻繁に尋ねられます。このメカニズムは、Db2サーバーのオペレーティングシステムプラットフォームによっても異なる場合があります。

テーブルのバックアップコピーを作成する目的で、CREATE TABLE LIKEを使用する前にtablename(接尾辞または接頭辞として)にタイムスタンプを追加することも検討できます。そうすれば、テーブルを削除する必要はほとんどありません(後で手動でバックアップコピーが不要になったことを知っている場合を除いて)。

関連する問題