Symfoware Server SQLビギナーズガイド - FUJITSU -
目次 索引 前ページ次ページ

第6章 いろいろなデータ操作の方法

6.13 順序を使用してデータを操作する

作成した順序に対して、CURRVALおよびNEXTVALを使用して順序番号を取り出すことができます。CURRVALは、アプリケーション内の現在の順序番号を取り出します。NEXTVALは、RDBシステム内で取り出した最後の順序番号の次の値を取り出します。

CURRVALおよびNEXTVALはアプリケーションおよびストアドプロシジャの以下のSQL文の箇所に指定できます。

なお、CURRVALおよびNEXTVALは、以下のSQL文の箇所には指定できません。

SELECT文の場合、順序番号は検索結果の行に対して採番されます。

UPDATE文の場合は、更新行に対して採番されます。また、INSERT文の場合は、挿入先の挿入行に対して採番されます。いずれの場合も、結果が複数件ある場合は、結果の各行に対して採番されます。

セション内で最初に順序番号を取り出す場合は、NEXTVALで順序番号を取り出してください。

1つのSQL文中で、同じ順序のNEXTVALを複数個指定している場合は、すべて同じ順序番号が返却されます。また、1つのSQL文中で、同じ順序のNEXTVALとCURRVALの両方を指定している場合は、それらが文中で出現する順番にかかわらず、NEXTVALとCURRVALの両方に対して、NEXTVALとして採番された同じ順序番号が返却されます。

例1

アプリケーションのSQL文中に順序を指定する方法を示します。従業員番号を増加させ、新しい従業員のためにその値を割り振ります。
順序の定義

CREATE SEQUENCE 会社管理.順序1
      INCREMENT BY 1
      START WITH 1


アプリケーションのSQL文中の順序の指定

INSERT INTO  会社管理.従業員表

      VALUES ( 会社管理.順序1.NEXTVAL , "山田太郎",200000, "企画部" )
                       (1)

(1) 順序

例2

順序を使用して挿入行に自動的に順序番号を入れる方法を示します。受注表の受注番号を増加させ、新しい受注番号を割り振ります。

挿入行に自動的に順序番号を入れるには、表定義の列にDEFAULT句で順序を指定します。アプリケーションのINSERT文では、DEFAULTに順序を指定した列を省略するか、挿入値にDEFAULTと指定します。

順序の定義
CREATE SEQUENCE 在庫管理.順序1
      INCREMENT BY 1
      START WITH 1
      MAXVALUE 10000

表の定義

CREATE TABLE  在庫管理.受注表(
      受注番号 INTEGER DEFAULT 在庫管理.順序1.NEXTVAL   NOT NULL ,
                                          (1)
      顧客コード DECIMAL(5,0) NOT NULL,
      商品番号   CHAR(4) NOT NULL,
      数量       INTEGER) 


アプリケーションのSQL文の指定

INSERT INTO  在庫管理.受注表(顧客コード, 商品番号,数量) 

      VALUES ( 12345,'A002',5) 

(1) 順序

例3

在庫管理.順序1の順序番号を、CURRVALおよびNEXTVALを指定して参照する例を示します。
  CURRVALを指定して現在の順序番号を参照します。

  SELECT 在庫管理.順序1.CURRVAL
                (1)
        FROM RDBII_SYSTEM.RDBII_ASSISTTABLE  (注)

  NEXTVALを指定して次の順序番号を参照します。

  SELECT 在庫管理.順序1.NEXTVAL
                (2)  
        FROM RDBII_SYSTEM.RDBII_ASSISTTABLE  (注)

(1) 順序

(2) 順序

注) RDBII_ASSISTTABLEは、SQL文を簡易的に実行するための表です。この表には1の値を持つデータが1件格納されています。選択リストに日時関数、順序などを記述した単一行SELECT文を実行して、現在の時刻、CURRVAL値などを取得する場合に利用できます。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright (C) 富士通株式会社 2006