4.32.1 PURGE TABLE文の形式と規則
(1) 機能
実表中の行をすべて削除します。
(2) 使用権限
表に対するDELETE権限を持つユーザが,その表の行を削除できます。
(4) オペランド
(a) 〔認可識別子.〕表識別子
- 認可識別子
-
表を所有するユーザの認可識別子を指定します。
認可識別子に"MASTER"は指定できません。認可識別子を省略した場合については,「名前の修飾」を参照してください。
- 表識別子
-
行をすべて削除する実表の名称を指定します。
(b) 〔IN (RDエリア名指定)〕
- IN
-
アクセス対象のRDエリアを指定します。なお,表識別子に指定した表が一時表の場合は指定できません。
- RDエリア名指定::=定数
-
表識別子に指定した表を格納しているRDエリアのうち,アクセスするRDエリアの名称をVARCHAR型,CHAR型,MVARCHAR型,又はMCHAR型の定数で指定します。複数のRDエリア名を指定する場合はコンマ(,)で区切って指定してください。RDエリア名は重複して指定できません。重複して指定した場合はエラーとなります。定数で指定するRDエリア名に許される文字については,「名前の指定」を参照してください。また,定数で指定したRDエリア名の前後の空白は無視されます。RDエリア名を引用符(")で囲んだ場合は,引用符(")の外側の空白だけを無視します。
また,表識別子に指定した表が分割されている場合,定義しているプライマリーキー,クラスタキー,又はインデクスは表の分割数に合わせてください。
インナレプリカ機能を適用しているRDエリアを指定する場合,オリジナルRDエリア名を指定してください。レプリカRDエリアを対象とする場合は,カレント切り替えコマンド(pddbchgコマンド),又はクライアント環境定義のPDDBACCSオペランドでアクセス対象RDエリアをレプリカRDエリアに切り替えてください。
(c) 〔{ WITH ROLLBACK | NO WAIT }〕
WITH ROLLBACK,又はNO WAITを省略した場合は,行を削除する表がほかのユーザのトランザクションによって使用されていたら,そのトランザクションが終了してから実行します。
システム定義のpd_check_pendingオペランドにUSEを指定した場合,行を削除する表を被参照表とする参照表がほかのユーザのトランザクションによって使用されていたときは,トランザクションが終了してから参照表を検査保留状態に設定します。
- WITH ROLLBACK
-
行を削除する表がほかのユーザで使用されていたら,トランザクションを取り消して無効にします。
システム定義のpd_check_pendingオペランドにUSEを指定した場合,行をすべて削除する表を被参照表とする参照表がほかのユーザのトランザクションに使用されているときは,トランザクションを取り消して無効にします。
- NO WAIT
-
行を削除する表がほかのユーザで使用されていたら,トランザクションを取り消さないで,このSQLを無効にします。
システム定義のpd_check_pendingオペランドにUSEを指定した場合,行をすべて削除する表を被参照表とする参照表がほかのユーザのトランザクションによって使用されているときは,トランザクションを取り消さないで,このSQLを無効にします。
(5) 共通規則
-
PURGE TABLE文が正常に実行された場合は,処理完了と同時にCOMMITされます。
-
LOB列又はLOB属性を格納するユーザLOB用RDエリアが更新凍結状態の場合,そのLOB列又はLOB属性がある表に対してPURGE TABLE文は実行できません(実行すると凍結済みエラーとなります)。
-
改竄防止表に対してPURGE TABLE文は実行できません。
-
共用表に対してPURGE TABLE文を実行した場合,共用表のEXCLUSIVE指定のLOCK文相当の排他が掛かります。HiRDB/パラレルサーバの場合,全バックエンドサーバで掛かります。
(6) 検査保留状態に関する規則
-
システム定義のpd_check_pendingオペランドにUSEを指定した場合,操作対象表が被参照表のときは,操作対象表を参照する参照表を検査保留状態に設定します。
-
操作対象表が検査保留状態である場合,操作対象表の検査保留状態を解除します。ただし,次の条件のどれかを満たす場合,ディクショナリ表中の検査保留状態は解除されません。そのため,整合性チェックユティリティを使用し,ディクショナリ表中の検査保留状態を解除してください。
-
システム定義のpd_check_pendingオペランドにNOUSEを指定している。
-
インナレプリカ機能を使用している。
-
RDエリア名指定のPURGE TABLE文を実行している。
-
(7) 留意事項
-
PURGE TABLE文はビュー表に対して指定できません。
-
PURGE TABLE文は,OLTP下のX/Openに従ったUAPから指定できません。また,OLTP下のUAPから手続きを呼び出す場合,PURGE TABLE文を使用した手続きは実行できません。
-
PURGE TABLE文は,トリガの動作中は実行できません。
-
システム定義のpd_check_pendingオペランドにUSEを指定するか,又は指定を省略した場合,コマンド又はユティリティとPURGE TABLE文を同時に実行できないことがあります。詳細については,マニュアル「HiRDB システム定義」のpd_check_pendingオペランドの説明を参照してください。
-
RDエリア名指定のPURGE TABLE文は抽象データ型を定義した表に対して指定できません。
-
RDエリア名指定のPURGE TABLE文で,指定したRDエリアの数が,表に定義した分割数と同じ場合,RDエリア名指定のないPURGE TABLE文として動作します。
(8) 使用例
在庫表(ZAIKO)のすべての行を削除します。
PURGE TABLE ZAIKO TRUNCATE TABLE ZAIKO