※当サイトの記事には、広告・プロモーションが含まれます。

Oracle DatabaseでSequenceの値を指定した値で更新したかったけど...

softantenna.com

⇧ Gitの使い方のベストプラクティスみたいなのって公開されてるのかな?

Oracle DatabaseでSequenceの値を指定した値で更新したかったけど...

テーブルに対するINSERT文で一意制約エラーとか出て、Sequenceの値を更新する必要があったのですが、

qiita.com

dba.stackexchange.com

⇧ 上記サイト様にもありますように、Oracle DatabaseのSequenceの更新方法が残念過ぎるという...

指定した値で直接更新ができないって...衝撃過ぎるんですけど...

Oracle Databaseのバージョンアップで新機能を追加する前に、こういったところの改修をして欲しいよね...

そんな願いが届いたのかは分かりませんが、Oracle Database 19cのドキュメントを確認してみると、

docs.oracle.com

  • 昇順の場合、RESTARTを指定してNEXTVALをMINVALUEにリセットします。 降順の場合、RESTARTによってNEXTVALはMAXVALUEにリセットされます。

https://docs.oracle.com/cd/F19136_01/sqlrf/ALTER-SEQUENCE.html#GUID-A6468B63-E7C9-4EF0-B048-82FE2449B26D

oracle.programmer-reference.com

⇧ 指定した値でSequenceの値を更新できそう。

まぁ、現場で使ってるのはOracle Database 11gなので、指定した値で直接更新する方法が利用できないのだけど...

ちなみに、そもそもSequenceって何?

docs.oracle.com

sequence is a schema object that can generate unique sequential values. These values are often used for primary and unique keys. You can refer to sequence values in SQL statements with these pseudocolumns:

  • CURRVAL: Returns the current value of a sequence

  • NEXTVAL: Increments the sequence and returns the next value

https://docs.oracle.com/cd/B14117_01/server.101/b10759/pseudocolumns002.htm

⇧ 一般的には、主キーのカラムに一意の連続値を設定する用途で作るものらしい。

自動採番したい場合させたい時に必要らしい。

で、テーブルのカラムでSequenceと紐づけた場合、そのカラムの値とSequenceの値が嚙み合っていないと一意制約違反とかのエラーが出るってことですかね?

この現象については、

blog.ricemountainer.net

⇧ 上記サイト様が詳しいです。

何か、

stackoverflow.com

⇧ キャッシュとかも関係してくる?かもしれないようです。

毎度モヤモヤ感が半端ない...

今回はこのへんで。