• ベストアンサー

オラクルのシーケンスについて

オラクルの連番(シーケンス)の振り方について一つお聞きしたい事がございます。 Insert時にシーケンスを使い、0から100まで順に連番を振りたいの ですが、100に到達する前に、あるタイミングで現在値を0に戻して 再び1から連番を振りたいんです。 ちなみにあるタイミングを、下記に簡単に例として書きます。 (1)ファイルから1レコードずつデータを読み込む。  (1)初回は何もチェックせずInsertをし、先頭から4バイトまでの値を変数に格納  (2)2レコード目以降は、先頭から4バイトまでの値を前回の値(変数)と比較   True(値が同じ)  ⇒順番に連番を振る   False(値が違う)  ⇒新たに0から連番を振る。              変わった値を変数に格納する。 (2)Insertをする。 私の知っている知識で行けば、シーケンスは1テーブルで一つのシーケンス しか使用できなかったはずですが・・・なにぶん知識がないので、もしか したら出来たのかな?と思ったので質問しました。 上に書いた事が可能であるかどうか教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yuji
  • ベストアンサー率37% (64/169)
回答No.2

Oracleのマニュアルを見ると、新しい番号で始めたい 場合はdrop & createしなさい、と書いてあります。 それができないなら、次の方法でできるかも??? (全く自信なし) alter sequence シーケンス名 increment by (101 - 現在の値); select シーケンス名.nextval from dual; alter sequence シーケンス名 increment by 1; これらは同一トランザクションで行ってください。 これでできなかったら、あきらめてdrop & create するか、 もしくは番号を管理するテーブルを別に作って、 自分で番号を管理するしかないでしょう。

sr20detk
質問者

お礼

御礼が遅くなりまして大変すいません。 Drop&Createが「出来る!」という人と、「出来ない」と言う人がいて、 どっちなんだろう?と思いつつ、オラクルがまだ手元に無いため検証も 出来ず、ただ「どっち??」という感じです。 オラクルが手に入りましたら、試してみたいと思います。 どうもありがとうございました。

その他の回答 (1)

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.1

最近は、Oracleを触っていませんので単なる思い付きです。 的外れでしたらごめんなさい。 Drop Sequece ? Create Sequence ? のようなことはできませんでしたっけ。 また、できたとしても不都合があるのでしょか?

sr20detk
質問者

お礼

どうもありがとうございます。 それは私も考えたのですが、このやり方はNGみたいです。

関連するQ&A