かなめのロジック

フリーSEの雑記ブログ。ORACLEやPostgreSQL、情報セキュリティ、金融について主に書いています。

シーケンス(順序)の現在値の確認方法

time 2017/02/27

シーケンス(順序)の現在値の確認方法

ORACLEのシーケンス(順序)ですが、現在どこまで採番されているのか、次に採番される値は何か、ということを確認したい時があるかと思います。

本記事では、シーケンスの現在値または次に採番される値の確認方法を紹介します。

sponsored link

現在値の正確な把握は困難

紹介すると最初に書きましたが、実はシーケンス(順序)の現在値の正確な把握は困難です。

本記事では、3つの方法を紹介しますが、大体の値の取得しかできないなど、それぞれ制限があります。

シーケンスの現在値の取得方法

静的データディクショナリビューを参照

1つ目は、静的データディクショナリビューのUSER_SEQUENCES(もしくは、ALL_SEQUENCESやDBA_SEQUENCES)でLAST_NUMBER項目を参照する方法です。

注意点としては、共有プールへのキャッシュを有効にしている場合、実際には生成されていない場合であっても、すでに共有プールへキャッシュされた値まで含めてしまう点です。

シーケンス名.CURRVAL

2つ目は、【シーケンス名.CURRVAL】を使用することで、セッション内で直前に生成された値の確認できます。

注意する点は、あくまでもセッション内という点です。他のセッションでの生成が時系列的に後であっても、セッション内で直前に生成された値しか確認できません。

また、セッション内で一度も生成していない場合は、エラー(ORA-08002)になります。

シーケンス名.NEXTVAL

3つ目は、【シーケンス名.NEXTVAL】を使用して、実際に値の生成とシーケンスのカウントアップをすることで現在値を確認する方法です。

確実な方法ですが、実際に値の生成とカウントアップをしてしまうので、シーケンスを利用しているデータに、値の歯抜けができてしまう欠点があります。

まとめ

ORACLEのシーケンス(順序)の現在値または次に採番される値の確認方法を見てきました。

意外と、シーケンスに影響を与えずに正確に値を把握するのは困難です。

しかし、実際には大体の把握で十分な場合が多いと思います。その場合は、静的データディクショナリビュー(USER_SEQUENCESなど)の参照をするのがよいでしょう。

関連


sponsored link

管理人

かなめ

フリーの業務系システムエンジニア。情報処理安全確保支援士。 ORACLEと金融と子育ての狭間で、元気に楽しくやってます。 [詳細]

管理人twitter

ブログ村



sponsored link