スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス

[目次][索引][前へ][次へ]

ASSIGN LIST文 形式1(リスト作成

機能

実表からリストを作成します。

使用権限

実表に対するSELECT権限を持つユーザが,その実表からリストを作成できます。

形式1<実表からのリストの作成>

 
  ASSIGN LIST リスト名 FROM (〔認可識別子.〕表識別子)
            〔WHERE 探索条件〕
            〔WITHOUT LOCK 〔{WAIT|NOWAIT}〕〕
            〔{WITH ROLLBACK|NO WAIT}〕
 

オペランド

作成するリストの名前を指定します。

既にあるリスト名を指定した場合,そのリストを削除し新しく作成したリストを有効とします。

認可識別子には,表の所有者の認可識別子を指定します。

表識別子には,作成するリストの基になる実表の名前を指定します。

表識別子には,以下の表は指定できません。

探索条件には,取り出す行を選択する条件を指定します。

探索条件を省略した場合は,指定した表のすべての行がリストになります。

ASSIGN LIST文の探索条件には,論理演算子としてANDNOTも指定できます。論理演算の評価の優先順位は,ANDと同じです。

ANDNOT論理演算をした場合の述語の結果を次に示します。

左辺 右辺
T F
T F T T
F F F F
F

(凡例)
T:真であることを示します。
F:偽であることを示します。
?:不定であることを示します。

注※
C1=V1 ANDNOT C2=V2は,C1=V1 AND NOT C2=V2と等価ではありません。
述語1=(述語2ANDNOT述語3)とすると,述語1を満たす集合は,述語2を満たす集合と述語3を満たす集合の差となります。
述語1=(述語2AND NOT述語3)とすると,述語は述語2とNOT述語3とのAND論理演算をした結果になります。
したがって,AND NOTの場合,上記真理値表の※は?(不定)となります。

探索条件についての規則を次に示します。

  1. 探索条件中に,次のものは指定できません。
    • 副問合せ(NOT指定のないIN述語中での,外への参照のない表副問合せは指定できます)
    • 四則演算,日付演算,時刻演算,連結演算,スカラ関数,CASE式,及びCAST指定
    • 列指定 比較演算子 列指定
    • 両辺が定数,USER,CURRENT_DATE,CURRENT_TIME,又はCURRENT_TIMESTAMP〔(p)〕から成る比較述語
    • 値式1が列指定で,値式2,又は値式3が列指定のBETWEEN述語
    • コンポネント指定
    • 関数呼出し(インデクスを使用するロジックを実装したプラグイン提供関数は指定できます)
    • IS FALSE,IS UNKNOWNの論理述語
    • XMLQUERY,XMLSERIALIZE,XMLPARSE,及び列指定のXML問合せ文脈項目の指定がないXMLEXISTS述語
  2. 探索条件中の列名には,表名,及び相関名を指定できません。
  3. 探索条件中に繰返し列を指定した場合は,添字としてANYを指定する必要があります。
  4. 探索条件で指定したすべての列にインデクス(IS NULL述語に指定した列に対して,除外キーを持つインデクスを除く)が定義されていなければなりません。構造化繰返し述語に対しては,構造化繰返し述語の探索条件中に指定した,すべての繰返し列を構成列に含む複数列インデクスが定義されていなければなりません。
  5. 繰返し列と繰返し列以外の列の両方を構成列に含むインデクスを使用して,繰返し列でない列の述語を評価する場合,繰返し列のどれかの列に条件を指定していればインデクスは使用できます。
  6. 表副問合せを指定したIN述語中の列には,次のどちらかのインデクスが定義されていなければなりません。なお,(b)はSQL最適化モードがコストベース最適化モード2の場合に限ります。
    (a) 単一列インデクス
    (b) 表副問合せを指定したIN述語中の列を先頭とする複数列インデクス
    表副問合せを指定したIN述語中の列が複数列インデクスの先頭でない場合でも,この列より前のインデクス構成列に,比較述語(=),NULL述語(IS NULL),又は右辺が値指定のIN述語(IN)のどれかが指定されていればかまいません。ただし,繰返し列をインデクス構成列に含むインデクスは除きます。また,右辺が値指定のIN述語(IN)の場合は,値指定の個数が次のどちらかの条件を満たしている必要があります。
    • INが1列だけの場合,値指定の個数は5以下
    • INが2列以上の場合,それぞれの列に指定した値指定の個数の積が5以下
  7. 探索条件を指定しない場合は,リストの基になるすべての表について,繰返し列以外のどれかの列にインデクス(プラグインインデクス,除外キーを持つインデクスを除く)が定義されていなければなりません。
  8. 繰返し列を指定した述語は論理演算子NOTで否定できません。
  9. ANDNOT論理演算を含む述語は論理演算子NOTで否定できません。
  10. 論理述語はNOTで否定できません。
  11. 表副問合せを指定したIN述語は論理演算子NOTで否定できません。
  12. 探索条件中にXMLEXISTS述語を指定した場合は,XQuery問合せがインデクスの使用条件を満たす必要があります。インデクスの使用条件については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。

このオペランドを省略した場合は,一度検索したデータの内容をトランザクションが終了するまで保証します。

WITHOUT LOCK〔WAIT〕
一度検索したデータの内容をトランザクション終了まで保証する必要がない場合に指定します。
WITHOUT LOCK〔WAIT〕を指定した場合,HiRDBはトランザクション終了を待たないで排他制御を解除するので,同時実行性を向上できます。

WITHOUT LOCK NOWAIT
ほかのユーザが更新中のデータでも,更新の完了を待たないで参照し,一度検索したデータの内容をトランザクション終了まで保証する必要がない場合に指定します。
WITHOUT LOCK NOWAITを指定した場合,HiRDBは排他制御をしません。更新中の表に対しても排他待ちしないで検索できるので,より同時実行性を向上できます。しかし,更新中の表を検索した場合は,タイミングによっては不正なデータが得られる場合があります。

このオペランドを省略した場合は,検索する表をほかのユーザが使用中ならば,使用中のユーザのトランザクションが終了するまで待ち,その後実行します(WITHOUT LOCK NOWAIT指定の場合を除く)。

WITH ROLLBACK
検索する表をほかのユーザが使用中の場合,トランザクションを取り消して無効にしたいときに指定します。

NO WAIT
検索する表をほかのユーザが使用中の場合,トランザクションを取り消さないでエラーにしたいときに指定します。ただし,このSQLの実行中に掛けた排他は解除されません。

共通規則

  1. リストは所有者だけ使用でき,権限定義,権限削除の対象とはなりません。実行ユーザとリストの所有者が異なる場合は,SET SESSION AUTHORIZATION文を使用して,実行ユーザを変更してください。
  2. リストはHiRDBから切り離しをしても削除されません。
  3. リストはHiRDB停止時に自動的に削除されます。
  4. 障害発生時には,リストは次のとおり検索できなくなるので(検索するとエラー),検索できないリストは削除,又は再作成する必要があります。
    (a)すべてのユニットが異常終了した場合
    すべてのリストが自動的に削除されます。
    (b)一部のユニットが異常終了した場合
    異常終了したユニットで作成したリストが検索できなくなります。
  5. リストがある間,リストの基表に対して次の操作はできません。
    • スキーマの削除
    • 表の削除
    • 表の定義変更
  6. リストを作成した場合,作成した行数をSQLCAのSQLERRD[2]に返します。
  7. リストは,SQLルーチン中には指定できません。
  8. ASSIGN LIST文は動的に実行できますが,直接ホストプログラムに埋め込んで実行できません。
  9. 同一ユーザが,複数同時にHiRDBと接続してリストを操作できません。
  10. 一つのリスト用RDエリアに格納できるリストの最大数は,データベース初期設定ユティリティ(pdinit),又はデータベース構成変更ユティリティ(pdmod)で指定する最大リスト登録数(500〜50,000)で決まります。

留意事項

  1. リストは基表と同一サーバ上のリスト用RDエリアに作成します。あらかじめリスト用RDエリアを準備しておいてください。
  2. リストはHiRDBから切り離しをしても削除されません。不要になったリストは,DROP LIST文で削除してください。
  3. リストがある間,リストの基表に対して次の操作をした場合は,リストを作り直してください。
    • PURGE TABLE文
    • 表の再編成
    • 作成モードのデータロード
    • RDエリアの再初期化

使用例

使用例については,「4. ASSIGN LIST文 形式2(リスト作成)」の使用例を参照してください。