Hitachi

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


2.28.1 NEXT VALUE式の形式と規則

〈この項の構成〉

(1) 概要

順序数生成子が生成する値を返却します。

(2) 使用権限

FOR PUBLIC USAGEを指定して定義した順序数生成子には,すべてのユーザがアクセスできます。それ以外の順序数生成子には,所有者だけがアクセスできます。

(3) 形式

 NEXT VALUE式::= NEXT VALUE FOR 〔認可識別子.〕順序数生成子識別子

(4) 説明

(5) 構文規則

  1. NEXT VALUE式の結果のデータ型は,指定した順序数生成子が生成する値のデータ型になります。

  2. 次の箇所には,副問合せを指定しないでNEXT VALUE式を指定できます。

    • INSERT文の問合せ指定の選択式

    • INSERT文の挿入値

    • UPDATE文の更新値

    ただし,次に示す箇所には指定できません。

    • CASE式

    • スカラ関数VALUE中

    • GROUP BY句,HAVING句,又は集合関数を指定した問合せ指定

    • WINDOW関数を指定した問合せ指定

    • DISTINCTを含む問合せ指定

    • UNION ALL以外の集合演算の演算項となる問合せ指定

  3. NEXT VALUE式の結果は非ナル値制約なし(ナル値を許す)となります。

(6) 共通規則

  1. 順序数生成子を定義した後で,最初にNEXT VALUE式を実行した場合は開始値が返却されます。

  2. 挿入値に指定された場合,INSERT文で挿入される1行ごとに,指定された順序数生成子が生成した値が挿入値となります。

  3. 更新値に指定された場合,UPDATE文で更新される1行ごとに,指定された順序数生成子が生成した値が更新値となります。

  4. 同一の行に対して同じ順序数生成子に対するNEXT VALUE式を複数指定した場合,それらのNEXT VALUE式はすべて同じ値を返却します。

(7) 留意事項

  1. ロールバックが発生してトランザクションが無効となった場合でも,順序数生成子の値は元に戻りません。

  2. NEXT VALUE式を指定したSQLの実行結果がエラーとなった場合でも,順序数生成子の値が更新されていることがあります。

(8) 使用例

  1. 商品ID(SID),商品名(SNAME),単価(TANKA)を持つ在庫表(ZAIKO)を定義します。

    CREATE TABLE ZAIKO(
    SID INTEGER,
    SNAME NCHAR(8),
    TANKA INTEGER)
  2. 商品IDを1000から9999まで発番する順序数生成子SEQ1を定義します。

    CREATE SEQUENCE SEQ1
    START WITH 1000
    INCREMENT BY 1
    MAXVALUE 9999

    NO CYCLE

  3. 在庫表(ZAIKO)に新たな商品を登録します。

    INSERT INTO ZAIKO VALUES(NEXT VALUE FOR SEQ1, N’ズボン’, 1200)
    INSERT INTO ZAIKO VALUES(NEXT VALUE FOR SEQ1, N’シャツ’, 1000)
    INSERT INTO ZAIKO VALUES(NEXT VALUE FOR SEQ1, N’セーター’, 1500)

    実行結果

    [図データ]

  4. 在庫表(ZAIKO)の商品ID(SID)が”1001”の商品IDを新しい商品IDに更新します。

    UPDATE ZAIKO SET SID = NEXT VALUE FOR SEQ1 WHERE SID = 1001

    実行結果

    [図データ]