web-dev-qa-db-ja.com

IBMDB2でテーブルを切り捨てるためのSQLクエリ

IBMDB2のテーブルを切り捨てるための構文を教えてもらえますか。

次のコマンドを実行しています:truncate table tableName immediate;

エラーはDB2です

SQLCODE = -104、SQLSTATE = 42601、SQLERRMC = table; truncate; JOIN、DRIVER = 3.50.152メッセージ:「truncate」の後に予期しないトークン「table」が見つかりました。予想されるトークンには、「JOIN」.. SQLCODE = -104、SQLSTATE = 42601、DRIVER = 3.50.152が含まれる場合があります。

構文は、IBMのリファレンスドキュメントで指定されているものと一致します: http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc。 sqlref/db2z_sql_truncate.htm

7
Cshah

切り捨て に関するすばらしい記事があります。これがDB2のものの要点です。

ほぼ標準に準拠しています。(バージョン9.7以降)DB2では、IMMEDIATEキーワードを通常のTRUNCATE TABLEステートメントに追加する必要があります(例:

TRUNCATE TABLE someschema.sometable IMMEDIATE 

TRUNCATE TABLEは、トランザクションの最初のステートメントである必要があります。 TRUNCATE TABLEで始まるトランザクションには他のステートメントが含まれる場合がありますが、トランザクションがロールバックされた場合、TRUNCATETABLE操作は元に戻されません。 DB2のTRUNCATETABLE操作には、いくつかのオプションの引数があります。これについて詳しくは、ドキュメントを参照してください。特に、REUSE STORAGE引数は、アドホックDBAタスクにとって重要な場合があります。 DB2バージョン<9.7では、IMPORTステートメントを悪用する可能性があります。残念ながら、これを機能させるには、コマンドが実行されるオペレーティングシステムを知る必要があります。

UNIXライクなシステムの場合:IMPORT FROM/dev/null OF DEL REPLACE INTO tablename Windowsの場合:IMPORT FROM NUL OF DEL REPLACE INTO tablenameIMPORTはすべてのコンテキストで悪用できるわけではありません。例えば、動的SQL(Java/.NET/PHP/...- db2コマンド行プロセッサーを使用しない)を使用する場合、ADMIN_CMDの呼び出しでIMPORTコマンドをラップする必要があります。例:

CALL ADMIN_CMD('IMPORT FROM /dev/null OF DEL REPLACE INTO tablename')

IMPORTは、他の操作を含むトランザクションで許可されているようですが、即時のCOMMIT操作を意味します。

ALTER TABLEコマンドを悪用してテーブルをすばやく空にすることもできますが、より多くの特権が必要になり、ロールフォワードリカバリで問題が発生する可能性があります。

これはWebサイトから取得されました: http://troels.arvin.dk/db/rdbms/#bulk-truncate_table-db2

12
Nick Vallely

DB2 for AS400を使用している場合、IMMEDIATE TRUNCATETABLEは機能しません。同等の回避策は、次のいずれかです。

  • [tableName]から削除
  • ALTER TABLE ALTER COLUMN RESTART WITH 1
  • またはより高速(最も効率的な方法)

  • システムにコマンドを渡して、物理ファイルをクリアします
  • Java構文:

    CommandCall command = new CommandCall(new AS400(AS400SystemName, AS400JavaUser, AS400JavaPwd));
    try {
        command.run("CLRPFM FILE(as400SchemaName/" + tableName + ")");
    
    2
    ResourceReaper

    どのバージョンのDB2を使用していますか? truncate tableコマンドはDB2v9で導入されました(少なくともメインフレームでは、リンクに基づいて質問しているように見えます)。

    この記事 はDB2 v8でそれを行うためのストアード・プロシージャーの方法を提供しますが、delete fromオプションに頼らなければならない場合があります。

    1
    paxdiablo

    使用'table_name'を即時に切り捨てます

    0
    vtokmak

    これは、9.7バージョンからDB2でTRUNCATEに使用できる正確なリファレンスドキュメントです。

    TRUNCATEのDB2リファレンス

    0
    raksja

    DB2 on z/OS V10テーブルの1つを空にします:テーブルを切り捨てます。コミット作業が続きます。例tempを切り捨てます。他の誰かのテーブル:owner.tableを切り捨てる例:student.workを切り捨てる;リンクされたDB2ではこれを試していません。 node2.student.workを切り捨てるかどうかはわかりません。いいね。

    テーブルのリストを自動的に作成するためのSQL。テーブル名と作成者の列幅が長すぎるために使用される部分文字列(substr)。あなたの価値観は異なるかもしれません。

    select 'truncate table '||substr(creator,1,9)||'.'||substr(name,1,20)  
        from sysibm.systables
            where creator = 'Student';
    
    0
    TechnoCaveman