Hitachi

Hitachi Advanced Data Binder SQLリファレンス


4.3.1 PURGE CHUNK文の指定形式および規則

チャンク内のすべての行を削除します。

PURGE CHUNK文は,マルチチャンク表に対してだけ実行できます。

〈この項の構成〉

(1) 指定形式

PURGE CHUNK文::=PURGE CHUNK 表名 〔〔AS〕 相関名〕
                       WHERE 探索条件

(2) 指定形式の説明

表名

処理対象のマルチチャンク表の表名(チャンク削除対象表)を指定します。表名の指定規則については,「6.1.5 名前の修飾」の「(2) 表名の指定形式」を参照してください。

なお,ビュー表は指定できません。

〔AS〕 相関名

チャンク削除対象表の相関名を指定します。相関名については,「6.1.5 名前の修飾」の「(4) 表指定の指定形式」を参照してください。

WHERE 探索条件

処理対象のチャンクのチャンクIDを指定します。

CHUNKIDを指定した探索条件を指定します。探索条件については,「7.18 探索条件」を参照してください。

探索条件には,比較述語,IN述語,または限定述語だけが指定できます。

比較述語:

比較述語については,「7.19.7 比較述語」を参照してください。

PURGE CHUNK文固有の指定規則を次に示します。

  • 比較演算子には,= だけを指定できます。

  • 比較演算項1または比較演算項2のどちらかにCHUNKIDを指定してください。

  • CHUNKIDの比較対象となる比較演算項には,整数定数,?パラメタ,またはスカラ副問合せを指定してください。スカラ副問合せについては,「7.3.1 副問合せの指定形式および規則」を参照してください。

  • 比較演算項に?パラメタを指定した場合,?パラメタに仮定されるデータ型はINTEGER型になります。

指定形式の例を次に示します。

WHERE CHUNKID=整数定数
WHERE CHUNKID=?
WHERE CHUNKID=(スカラ副問合せ)
重要

比較述語を使用してチャンクIDを指定する場合,チャンクIDは1つしか指定できません。そのため,比較述語を使用して,複数のチャンクの行を削除する場合は,PURGE CHUNK文を複数回実行する必要があります。

なお,IN述語または限定述語を使用すると,条件に合致した複数のチャンクの行を1度のPURGE CHUNK文で削除することができます。

IN述語:

IN述語については,「7.19.3 IN述語」を参照してください。

PURGE CHUNK文固有の指定規則を次に示します。

  • 表副問合せを使用したIN述語だけが指定できます。

  • IN述語中の値式1にはCHUNKIDを指定してください。

  • NOTを指定したIN述語は指定できません。

指定形式の例を次に示します。

WHERE CHUNKID IN (表副問合せ)
限定述語:

限定述語については,「7.19.8 限定述語」を参照してください。

PURGE CHUNK文固有の指定規則を次に示します。

  • 比較演算子には,= だけを指定できます。

  • ANYまたはSOMEだけを指定できます。ALLは指定できません。

  • 限定述語中の値式にはCHUNKIDを指定してください。

指定形式の例を次に示します。

WHERE CHUNKID=ANY(表副問合せ)
WHERE CHUNKID=SOME(表副問合せ)

(3) 実行時に必要な権限

PURGE CHUNK文を実行する場合,次に示すすべての権限が必要になります。

副問合せを指定した場合,FROM句に指定したすべての表に対するSELECT権限が必要になります。

(4) 規則

  1. CHUNKIDの比較相手となる値式の結果のデータ型は,INTEGER型またはSMALLINT型となるようにしてください。

  2. 述語に対する論理演算(ANDORNOT)は指定できません。

    (例)エラーとなる例

    WHERE CHUNKID=1 OR CHUNKID=5
    WHERE NOT(CHUNKID=1)
  3. 副問合せ中にCHUNKIDは指定できません。

  4. 副問合せを指定した場合,CHUNKIDの比較相手となる選択式のデータ型はINTEGER型またはSMALLINT型である必要があります。

    (例)

    PURGE CHUNK "SALESLIST"
            WHERE CHUNKID=(
                           SELECT "CHUNK_ID"
                             FROM "MASTER"."STATUS_CHUNKS"
                               WHERE "TABLE_SCHEMA" = 'ADBUSER01'
                                 AND "TABLE_NAME" = 'SALESLIST'
                                 AND "CHUNK_COMMENT" = '2015/01/24追加データ')

    下線部分が,CHUNKIDの比較相手となる選択式になります。

  5. 探索条件中にチャンク削除対象表の列を指定することはできません。

  6. 探索条件に指定した副問合せのFROM句に,チャンク削除対象表は指定できません。

  7. カレントチャンクのチャンクIDを指定した場合,PURGE CHUNK文がエラーになります。

  8. 存在しないチャンクIDを指定した場合,指定されたチャンクIDを無視して処理を続行します。

  9. PURGE CHUNK文中に指定できる表,導出表表関数導出表,および集まり導出表の延べ数は,最大2,048個になります。SQL文中に指定されている表,導出表表関数導出表,および集まり導出表の数え方の規則と例については,「4.4.1 SELECT文の指定形式および規則」の「(4) 規則」を参照してください。

  10. PURGE CHUNK文中に指定している集合演算がすべてUNIONの場合,指定できる集合演算の数は最大1,023個になります。ただし,指定した集合演算にEXCEPTまたはINTERSECTがある場合は,指定できる集合演算の数は最大63個になります。

  11. PURGE CHUNK文中に指定できる外結合(FULL OUTER JOIN)の数は,最大63個になります。

  12. PURGE CHUNK文の実行時,DBエリアに対して占有モードで排他が掛かります。そのため,チャンク削除対象表,およびチャンク削除対象表のインデクスが格納されているDBエリア内に格納されているほかの表またはインデクスの操作中に,PURGE CHUNK文を実行することはできません。

  13. PURGE CHUNK文の処理が正常終了した場合,自動的にコミットされます。そのため,PURGE CHUNK文の実行後にCOMMIT文を実行する必要はありません。

  14. PURGE CHUNK文の処理が正常終了した場合,処理対象のチャンク(チャンクIDに指定したチャンク)は削除されます。

  15. 次に示す条件が重なった場合,PURGE CHUNK文がエラーになります。

    • PURGE CHUNK文を実行するコネクション内に,チャンク削除対象表の検索を行うカーソルがある

    • そのカーソルがオープン中である

  16. JDBCドライバを使用してPURGE CHUNK文を実行する場合,同じコネクション内にチャンク削除対象表の検索を行うStatementオブジェクトおよびPreparedStatementオブジェクトがあると,PURGE CHUNK文がエラーになります。

(5) 例題

例題1

販売履歴表(SALESLIST)のチャンクのうち,チャンクIDが1のチャンクの全行を削除します。

PURGE CHUNK "SALESLIST" WHERE CHUNKID=1

上記は,削除対象のチャンクIDを整数定数で指定している例です。

例題2

販売履歴表(SALESLIST)のチャンクのうち,?パラメタで指定するチャンクIDのチャンクの全行を削除します。

PURGE CHUNK "SALESLIST" WHERE CHUNKID=?

上記は,削除対象のチャンクIDを?パラメタで指定している例です。

例題3

販売履歴表(SALESLIST)のチャンクのうち,次に示す条件を満たすチャンクの全行を削除します。

  • チャンクコメントに「2015/01/24追加データ」が設定されているチャンク

PURGE CHUNK "SALESLIST"
        WHERE CHUNKID=(
                       SELECT "CHUNK_ID"
                         FROM "MASTER"."STATUS_CHUNKS"
                           WHERE "TABLE_SCHEMA" = 'ADBUSER01'
                             AND "TABLE_NAME" = 'SALESLIST'
                             AND "CHUNK_COMMENT" = '2015/01/24追加データ')

上記は,削除対象のチャンクIDをスカラ副問合せで指定している例です。

重要

上記のPURGE CHUNK文を実行するには,チャンクコメントに「2015/01/24追加データ」が設定されているチャンクが,1つだけであることが前提となります。「2015/01/24追加データ」が設定されているチャンクが複数ある場合は,IN述語または限定述語を使用してください。

例題4

販売履歴表(SALESLIST)のチャンクのうち,次に示す条件を満たすチャンクの全行を削除します。

  • チャンクコメントに「2015XXXX追加データ」が設定されているチャンク

XXXXには,月,日が記述されているとします。

PURGE CHUNK "SALESLIST"
        WHERE CHUNKID IN (
                          SELECT "CHUNK_ID"
                            FROM "MASTER"."STATUS_CHUNKS"
                              WHERE "TABLE_SCHEMA" = 'ADBUSER01'
                                AND "TABLE_NAME" = 'SALESLIST'
                                AND "CHUNK_COMMENT" LIKE '2015%追加データ')

上記は,削除対象のチャンクIDをIN述語で指定している例です。

例題5

販売履歴表(SALESLIST)のチャンクのうち,待機状態のチャンクの全行を削除します。

PURGE CHUNK "SALESLIST" 
        WHERE CHUNKID=ANY(
                          SELECT "CHUNK_ID"
                            FROM "MASTER"."STATUS_CHUNKS"
                              WHERE "TABLE_SCHEMA" = 'ADBUSER01'
                                AND "TABLE_NAME" = 'SALESLIST'
                                AND "CHUNK_STATUS" = 'Wait')

上記は,削除対象のチャンクIDを限定述語で指定している例です。