Hitachi

Hitachi Advanced Data Binder SQLリファレンス


7.17.1 表値構成子の指定形式および規則

表値構成子には,導出表を構成する行(行値構成子の集合)を指定します。

〈この項の構成〉

(1) 指定形式

表値構成子::=VALUES 行値構成子〔,行値構成子〕…
 
  行値構成子::=(行値構成子要素〔,行値構成子要素〕…)
    行値構成子要素::={値指定スカラ関数CASTスカラ関数CONVERT

(2) 指定形式の説明

行値構成子
行値構成子::=(行値構成子要素〔,行値構成子要素〕…)
  行値構成子要素::={値指定スカラ関数CASTスカラ関数CONVERT

行値構成子には,1つ以上の行値構成子要素を指定します。各行値構成子要素の値が,導出表の1行の各列の値になります。

(例)

[図データ]

値指定

行値構成子要素を値指定の形式で指定します。値指定については,「7.21 値指定」を参照してください。

スカラ関数CAST

スカラ関数CASTを使用して行値構成子要素を指定します。スカラ関数CASTについては,「8.13.3 CAST」を参照してください。

指定規則を次に示します。

  • 変換対象データには,NULLまたは?パラメタだけを指定できます。

スカラ関数CONVERT

スカラ関数CONVERTを使用して行値構成子要素を指定します。スカラ関数CONVERTについては,「8.13.5 CONVERT」を参照してください。

指定規則を次に示します。

  • 変換対象データには,NULLまたは?パラメタだけを指定できます。

  • 書式指定は指定できません。

(3) 規則

  1. 各行値構成子の行値構成子要素の数は同じにしてください。

    正しい指定例:VALUES (11,12,13),(21,22,23),(31,32,33)

    誤った指定例:VALUES (11,12,13),(21,22),(31,32,33,34)

  2. 各行値構成子のi番目の行値構成子要素のデータ型は,それぞれ比較できるデータ型にしてください。比較できるデータ型については,「6.2.2 変換,代入,比較できるデータ型」の「(1) 比較できるデータ型」を参照してください。

    正しい指定例:VALUES (11,12,13),(21.1,22.2,23.3),(1.0E+1,1.0E+2,1.0E+3)

    誤った指定例:VALUES (11,12,13),('AB','CD',23)

    なお,次に示すデータは比較できません。

    • 日付データと日付を表す既定の入力表現

    • 時刻データと時刻を表す既定の入力表現

    • 時刻印データと時刻印を表す既定の入力表現

  3. 表値構成子によって導出されるi番目の列の結果のデータ型とデータ長は,各行値構成子のi番目の行値構成子要素のデータ型によって決まります。詳細については,「7.20.2 値式の結果のデータ型」を参照してください。

  4. 行値構成子は,最大30,000個指定できます。

  5. 1SQL文中に指定できる表値構成子と問合せ指定の合計数は,最大1,024個です。

  6. 各行値構成子に指定できる行値構成子要素の数は,最大1,000個です。

  7. 行値構成子要素には,?パラメタを単独で指定できません。

(4) 例題

例題1

表値構成子を指定したSELECT文を実行します。

SELECT "C1","C2","C3" FROM (VALUES (11,12,13),
                                   (21,22,23)
                           ) AS "V1"("C1","C2","C3")

下線部分が表値構成子の指定です。

実行結果の例

[図データ]

例題2

販売履歴表(SALESLIST)と,表値構成子によって導出された顧客表(USERSLIST)から,商品コード(PUR-CODE)がP001の商品を購入したことがある顧客の一覧(顧客ID,名前)を,重複を除いて検索します。

SELECT DISTINCT "USERSLIST"."USERID","NAME"
  FROM "SALESLIST"
         INNER JOIN
         (VALUES('U001','Maria'),('U002','Nancy')) AS "USERSLIST"("USERID","NAME")
            ON "USERSLIST"."USERID"="SALESLIST"."USERID"
        WHERE "SALESLIST"."PUR-CODE"='P001'

下線部分が表値構成子の指定です。

例題3

顧客表(USERSLIST)に複数のデータを挿入します。

INSERT INTO "USERSLIST"("USERID","AGE")
    SELECT * FROM (VALUES('USER001',10),('USER002',20))

下線部分が表値構成子の指定です。