Hitachi

ノンストップデータベース HiRDB Version 10 SQLリファレンス


2.1.1 カーソル指定 形式1

〈この項の構成〉

(1) 機能

一つ以上の表からのデータの検索,検索結果の並べ替え(ソート)をするために指定します。

カーソル指定はカーソル宣言中,及び動的SELECT文中に指定します。

動的SELECT文については,「動的SELECT文 形式1(動的検索)」を参照してください。

(2) 使用権限

カーソル指定に含まれるすべての問合せ指定,又は副問合せを使用できるユーザは,カーソル指定を使用できます。

問合せ指定の権限については「問合せ指定」,副問合せの権限については「副問合せ」を参照してください。

(3) 形式

形式1<一つ以上の表の検索>
 問合せ式〔ORDER BY{列指定|ソート項目指定番号}〔{ASC|DESC}〕
      〔,{列指定|ソート項目指定番号}〔{ASC|DESC}〕〕… 〕
     〔LIMIT {〔オフセット行数,〕{リミット行数|ALL}
         | {リミット行数|ALL}〔OFFSET オフセット行数〕}〕

(4) オペランド

問合せ指定,又は問合せ指定の結果得られる導出表同士の和集合,又は差集合を求めるために指定します。

問合せ式については,「問合せ式」を参照してください。

問合せ式での検索結果を,昇順,又は降順に並べ替える場合のソートの方法を指定します。

ORDER BY句を省略した場合,導出表中の行の並びは保証しません。

ORDER BY句についての規則を次に示します。

  1. ソートのキーに指定できる列の最大数は255個です。

  2. 同じ列は2回以上指定できません。

  3. 最も外側の問合せの選択式にAS 列名を指定している場合,問合せ式で導出される表に重複する列名があるときは,その列名をソートのキーに指定できません。

  4. ソートのキーになる項目で,次の項目は指定できません。

    • 繰返し列,及び繰返し列を含む値式

    • 予備列,及び予備列を含む値式

    • BLOB

    • 定義長が32,001バイト以上のBINARY

    • BOOLEAN

    • 抽象データ型

    • WRITE指定

    • GET_JAVA_STORED_ROUTINE_SOURCE指定

  5. ORDER BY句を指定した場合,選択式には,次に示すデータ型のSQL変数,SQLパラメタ,及び定数は単独で指定できません。

    • BLOB

    • 定義長が32,001バイト以上のBINARY

    • 抽象データ型

列指定

ソートのキーにする列を指定します。

列指定についての規則を次に示します。

  1. 問合せ式にUNION〔ALL〕,又はEXCEPT〔ALL〕を含む場合,列指定はできません。ただし,問合せ式で導出される表に重複のない列名がある場合は,その列名を指定できます。

  2. 最も外側の問合せにSELECT DISTINCTを指定している場合,ORDER BY句に指定する列は,検索結果として出力する項目(選択式で指定されている項目)でなければなりません。

  3. 最も外側の問合せ指定にSELECT DISTINCTの指定がなく,GROUP BY句又は集合関数を指定している場合は,ORDER BY句に指定する列はGROUP化列でなければなりません。そのほかの場合には,最も外側の問合せ指定で指定している表の,すべての列を指定できます。

ソート項目指定番号

UNION〔ALL〕,又はEXCEPT〔ALL〕を指定した場合は,問合せ式の結果得られた導出表の列のうち,ソートのキーにしたい列が導出表中で何番目にあるのか,その位置を示す番号を指定します。

UNION〔ALL〕,又はEXCEPT〔ALL〕の指定がなく,集合関数,ウィンドウ関数,定数,四則演算,日付演算,スカラ関数,CASE式,CAST指定,関数呼出し,コンポネント指定,及び連結演算の結果得られた導出表中の列をソートのキーにする場合は,ソートのキーにしたい列が導出表の中で何番目に指定されているのか,その位置を表す番号を指定します。

選択式にROWを指定した問合せ式のORDER BY句にはソート項目の指定番号は指定できません。

ASC

検索結果を昇順に並べ替える場合,指定します。

DESC

検索結果を降順に並べ替える場合,指定します。

問合せ式での検索結果のうち,先頭から読み飛ばす行数,及び取得する行数を指定します。LIMIT句を指定すると,SQLの検索性能の向上が期待できます。どのような場合に指定するかについては,マニュアル「HiRDB UAP開発ガイド」の先頭からn行の検索結果を取得する機能を参照してください。

オフセット行数

オフセット行数は,問合せ式の結果のうち先頭から読み飛ばす行数を指定します。

リミット行数

オフセット行数の指定がない場合,問合せ式の結果から取得する行数を指定します。

オフセット行数の指定がある場合,問合せ式の結果のうち先頭からオフセット行数を読み飛ばしたところから取得する行数を指定します。

ALL

オフセット行数の指定がない場合,問合せ式の結果のすべてを取得します。

オフセット行数の指定がある場合,問合せ式の結果のうち先頭からオフセット行数を読み飛ばした残りのすべてを取得します。

LIMIT句についての規則を次に示します。

  1. オフセット行数,及びリミット行数には,整数定数,埋込み変数,?パラメタ,SQL変数,及びSQLパラメタを指定できます。

  2. オフセット行数,及びリミット行数のデータ型は整数(SMALLINT又はINTEGER)にしてください。

  3. オフセット行数,及びリミット行数にナル値は指定できません。

  4. オフセット行数,及びリミット行数に?パラメタ,又は埋込み変数を指定した場合,?パラメタ,又は埋込み変数のデータ型は,INTEGER型(標識変数なし)が仮定されます。

  5. オフセット行数に指定できる値の範囲は0〜2,147,483,647です。

  6. オフセット行数に0を指定した場合は,オフセット行数に指定がない場合と同じになります。

  7. リミット行数に指定できる値の範囲は−1〜2,147,483,647です。

  8. リミット行数に−1を指定する場合は,定数で指定してください。

  9. オフセット行数とリミット行数に指定できる値の合計は,2,147,483,647までです。

  10. リミット行数≧0の場合,検索結果行数は次のようになります。

    Max(Min(問合せ式の結果行数−オフセット行数,リミット行数),0)

  11. リミット行数=−1,又はALLを指定した場合,検索結果行数は次のようになります。

    Max(問合せ式の結果行数−オフセット行数,0)

  12. オフセット行数を指定した場合,読み飛ばした最終行と同じソートのキーの値を持つ行が複数存在するか,又はソートのキーの指定がないと,検索結果は一意に決まりません。

  13. 問合せ式の結果がリミット行数を超える場合,リミット行数の最終行と同じソートのキーの値を持つ行が複数存在するか,又はソートのキーの指定がないと検索結果は一意に決まりません。検索結果が一意に決まらない場合の例を次に示します。

    (例)

    次のSQLで宣言したカーソルを使用して表(ZAIKO)を検索した場合,ソートのキーとなる列(TANKA)に,3番目に小さい値である'3640'を持つ行が複数あるため,検索結果が結果1となるか,結果2となるかは不定となります。

    DECLARE CR1 CURSOR FOR
      SELECT * FROM ZAIKO ORDER BY TANKA LIMIT 3

    [図データ]

(5) 留意事項

  1. ORDER BYを指定すると,HiRDBが作業表を作成することがあります。このとき,作業表の行長によっては,ORDER BYの処理が制限されることがあります。作業表の行長については,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

(6) 指定例

  1. カーソル宣言中でカーソル指定を指定します。

      DECLARE CR1 CURSOR FOR
        SELECT SNAME,SUM(ZSURYO)
          FROM ZAIKO
          GROUP BY SNAME
          ORDER BY SNAME ASC
  2. カーソル宣言中のカーソル指定でLIMIT句を指定します。

      DECLARE CR1 CURSOR FOR
        SELECT SCODE,ZSURYO
          FROM ZAIKO
          WHERE ZSURYO>20
          ORDER BY 2,1
          LIMIT 10