DB2でシーケンスの初期値を変更した時の不思議
DB2で、シーケンスの初期値を変更する時にちょっと不思議な事があります。
初期値を変更するには2つパターンがあると思います。
初期値を「10」に変更する場合。
1. 1度「DROP」して、「CREATE」する再作成パターン
DROP SEQUENCE シーケンス名 CREATE SEQUENCE シーケンス名 AS INTEGER START WITH 10 INCREMENT BY 1 NO MINVALUE MAXVALUE 999999999 CYCLE NO CACHE
2. 「ALTER」文で初期値だけを変更するパターン
ALTER SEQUENCE シーケンス名 RESTART WITH 10
初期値を更新した後にシステムカタログ表の「SYSCAT.SEQUENCES」で
下記のSQLで実行して、「START」や「NEXTCACHEFIRSTVALUE」の値を確認します。
SELECT * FROM SYSCAT.SEQUENCES WHERE SEQNAME = シーケンス名 AND SEQSCHEMA = スキーマ名
1の方法だとシステムカタログ表の値が更新されていて視認できるのですが
2の方法だと値は更新されているはずなのですが表示上は変わっていません。
そこで下記のSQLでダミー表を使って値を更新すると表示が変わります。
SELECT NEXTVAL FOR シーケンス名 FROM SYSIBM.SYSDUMMY1
これだと1つ値が更新されてしまうので、初期値を「10」にしようとすると
「ALTER」文で更新する時に「9」にしないとダメです。
なんでなんやろな〜( ̄ー ̄?)