1月15日(木)3コマ目

今日、やったこと

  • [確認テスト]確認テスト2
  • シーケンス

今日のホワイトボード

シーケンス

シーケンスは、主キーの値のような、オンリーワンになる値を生成したいときに使う。

もし、下図のようなテーブルを作って、新たに主キーの値が必要なときに

  • テーブルロック
  • テーブル検索
  • 検索値+1で更新
  • テーブルロック解除

を行って値を取得すると、アクセスが集中した場合、ロック解除待ちのユーザーが発生し、アクセス速度が遅くなる。

図 アクセスが集中すると


シーケンスはこのようなケースに対応するために用意されたモノ。


シーケンス作成

まず、商品マスタテーブル作成。

図 商品マスタテーブル作成


この商品マスタにデータを登録する際、ID列(=主キー列)の値をシーケンスから採番する。

商品マスタテーブルのID列に新しい値を採番するためのseq_商品IDシーケンスを作成。

図 シーケンス作成


シーケンスから採番する①

商品マスタテーブルに新たに商品を登録する際、ID列の値は作成したseq_商品IDシーケンスから採番する。

図 商品マスタ登録 1件目(ID列はseq_商品IDから採番)

シーケンスから採番するには、

 シーケンス名.nextval

で取得できる。


商品マスタテーブルを検索して、採番された値を確認。

図 商品マスタテーブルを確認

はじめてseq_商品IDから採番したため、初期値の1が採番されている。


シーケンスから採番する②

商品マスタテーブルに2件目のデータを登録する。

このとき、seq_商品IDシーケンスから採番される値は

 初期値(=1) + 増分(=1)×1 = 2

となる。

図 商品マスタ登録 2件目(ID列はseq_商品IDから採番)

商品マスタテーブルを検索して、採番された値を確認。

図 商品マスタテーブルを確認
予想通り、ID列には2が登録されている。


直近に採番した値を取得したい

直近に採番した値は

 シーケンス名.currval

で取得できる。

図 シーケンス名.currvalで直近採番値を取得


[まとめ]シーケンスを使う

シーケンスから新たに値を採番するには シーケンス名.nextval で取得できる。

シーケンスから直近に採番した値を取得するには シーケンス名.currval で取得できる。

図 シーケンスを使う

cycleとnocycle

シーケンス作成時に指定できるcycleとnocycleは採番する値を循環OKにするか否か。
図 cycleとnocycle


[おまけ]dualテーブル

オラクルで使えるダミーテーブル。

オラクルでは、from句は必須。

でも関数実行結果だけを取得したい場合、テーブルは不要。こんなときにダミーテーブルのdualを使う。

図 ダミーテーブルのdual


次回は

テストの解説。

シーケンスの練習問題。

このブログの人気の投稿

10月30日(木)3コマ目

1月22日(木)3コマ目

12月4日(木)3コマ目