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 ; !!
■参考ページ