FirebirdでSEQUENCEを使う。

SEQUENCEは数値を数えるオブジェクトです。
新しい数値を取得したり、現在の数値を取得することができます。
(AccessのオートナンバーやMySQLのauto incrementのようなこともできます。)

データを登録時にPRIMARY KEYに新しい値を設定するときに、SEQUENCEがよく使用されます。

SEQUENCEはFirebird 2.0で導入されました。
Firebird 1.0からあったGENERATORと同じ機能を持ちます。

■SEQUENCEを作成する

CREATE SEQUENCE SEQUENCE名

create sequence seqtest

■SEQUENCEの値を変更する

ALTER SEQUENCE SEQUENCE名 RESTART WITH 新しい値

alter sequence seqtest restart with 0

■SEQUENCEを削除する

DROP SEQUENCE sequence-name

drop sequence seqtest

■SEQUENCEの次の値を取得する

NEXT VALUE FOR SEQUENCE名

select next value for seqtest from RDB$DATABASE

登録時にSEQUENCEの次の値を設定する例

insert into table1(field1, field2) values(next value for seqtest, 'test')

※「NEXT VALUE FOR」構文は標準SQLです。

Firebird 1.xではGEN_ID()を使います。

GEN_ID (SEQUENCE名, 増分値)

select GEN_ID(seqtest, 1) from RDB$DATABASE;

■SEQUENCEの現在の値を取得する

GEN_ID(SEQUENCE名, 0)

select GEN_ID(seqtest, 0) from RDB$DATABASE;

■TRIGGERでオートインクリメント

トリガーを使い、登録時にIDに値を設定する例

set term !! ;
CREATE TRIGGER T1_BI FOR T1
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
if (NEW.ID is NULL) then NEW.ID = GEN_ID(GEN_T1_ID, 1);
END!!
set term ; !!

■参考ページ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください