16

DB2テーブルが存在する場合はそれを削除するか、エラーを削除して無視する必要があります。

4

6 に答える 6

9

これを試してください:

IF EXISTS (SELECT name FROM sysibm.systables WHERE name = 'tab_name') THEN
DROP TABLE tab_name;END IF;
于 2017-04-03T10:02:46.790 に答える
4

systableで検索:as400(power i、system i)を使用している場合、システムテーブル名はQSYS2.SYSTABLESです。それ以外の場合は、sysibm.systablesまたはsyscat.tablesを試してください(これはオペレーティングシステムによって異なります)。

BEGIN    
IF EXISTS (SELECT NAME FROM QSYS2.SYSTABLES WHERE TABLE_SCHEMA = 'YOURLIBINUPPER' AND TABLE_NAME = 'YOUTABLENAMEINUPPER') THEN           
  DROP TABLE YOURLIBINUPPER.YOUTABLENAMEINUPPER;                             
END IF;                                                        
END  ; 
于 2017-04-24T09:27:19.357 に答える
4

SYSCAT.TABLES以下は、テーブルが存在するかどうかを確認するためにビューを照会するDB2で機能しました。DROP TABLEはいの場合、ステートメントを準備して実行します。

BEGIN    
   IF EXISTS (SELECT TABNAME FROM SYSCAT.TABLES WHERE TABSCHEMA = 'SCHEMA_NAME' AND TABNAME = 'TABLE_NAME') THEN 
      PREPARE stmt FROM 'DROP TABLE SCHEMA_NAME.TABLE_NAME';
      EXECUTE stmt;
   END IF;                                                        
END
于 2019-11-06T20:30:38.420 に答える
3

これはもっと簡単で、私にとってはうまくいきます:

DROP TABLE SCHEMA.TEST IF EXISTS;
于 2020-07-01T08:21:01.203 に答える
2

テーブルが存在するかどうかの最初のクエリ

select tabname from syscat.tables where tabschema='myschema' and tabname='mytable'

そしてそれが何か問題を返すならあなたの

drop table myschema.mytable

他の可能性は、dropコマンドを発行して、テーブルが存在しない場合に発生する例外をキャッチすることです。そのコードをtry{...}catch(Exception e){//Ignore}ブロック内に配置するだけです。

于 2011-11-26T12:14:23.683 に答える
1

ここで他の回答を補足するために、ANSI互換になりたい場合は、以下のクエリを使用することもできます。IBMiおよびLUWで機能するはずです。

SELECT * FROM information_schema.tables WHERE TABLE_SCHEMA = 'MY_SCHEMA' AND TABLE_NAME = 'MY_TABLE';

次に、結果が返された場合:

DROP TABLE MY_SCHEMA.MY_TABLE;
于 2021-04-16T14:46:47.743 に答える