2.28.1 NEXT VALUE式の形式と規則
(1) 概要
順序数生成子が生成する値を返却します。
(2) 使用権限
FOR PUBLIC USAGEを指定して定義した順序数生成子には,すべてのユーザがアクセスできます。それ以外の順序数生成子には,所有者だけがアクセスできます。
(3) 形式
NEXT VALUE式::= NEXT VALUE FOR 〔認可識別子.〕順序数生成子識別子
(4) 説明
-
認可識別子
順序数生成子の所有者の認可識別子を指定します。
-
順序数生成子識別子
使用する順序数生成子の識別子を指定します。
(5) 構文規則
-
NEXT VALUE式の結果のデータ型は,指定した順序数生成子が生成する値のデータ型になります。
-
次の箇所には,副問合せを指定しないでNEXT VALUE式を指定できます。
-
INSERT文の問合せ指定の選択式
-
INSERT文の挿入値
-
UPDATE文の更新値
ただし,次に示す箇所には指定できません。
-
CASE式
-
スカラ関数VALUE中
-
GROUP BY句,HAVING句,又は集合関数を指定した問合せ指定
-
WINDOW関数を指定した問合せ指定
-
DISTINCTを含む問合せ指定
-
UNION ALL以外の集合演算の演算項となる問合せ指定
-
-
NEXT VALUE式の結果は非ナル値制約なし(ナル値を許す)となります。
(6) 共通規則
-
順序数生成子を定義した後で,最初にNEXT VALUE式を実行した場合は開始値が返却されます。
-
挿入値に指定された場合,INSERT文で挿入される1行ごとに,指定された順序数生成子が生成した値が挿入値となります。
-
更新値に指定された場合,UPDATE文で更新される1行ごとに,指定された順序数生成子が生成した値が更新値となります。
-
同一の行に対して同じ順序数生成子に対するNEXT VALUE式を複数指定した場合,それらのNEXT VALUE式はすべて同じ値を返却します。
(7) 留意事項
-
ロールバックが発生してトランザクションが無効となった場合でも,順序数生成子の値は元に戻りません。
-
NEXT VALUE式を指定したSQLの実行結果がエラーとなった場合でも,順序数生成子の値が更新されていることがあります。
(8) 使用例
-
商品ID(SID),商品名(SNAME),単価(TANKA)を持つ在庫表(ZAIKO)を定義します。
CREATE TABLE ZAIKO( SID INTEGER, SNAME NCHAR(8), TANKA INTEGER)
-
商品IDを1000から9999まで発番する順序数生成子SEQ1を定義します。
CREATE SEQUENCE SEQ1 START WITH 1000 INCREMENT BY 1 MAXVALUE 9999
NO CYCLE
-
在庫表(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)
実行結果
-
在庫表(ZAIKO)の商品ID(SID)が”1001”の商品IDを新しい商品IDに更新します。
UPDATE ZAIKO SET SID = NEXT VALUE FOR SEQ1 WHERE SID = 1001
実行結果