- ベストアンサー
オラクルのシーケンスについて
オラクルの連番(シーケンス)の振り方について一つお聞きしたい事がございます。 Insert時にシーケンスを使い、0から100まで順に連番を振りたいの ですが、100に到達する前に、あるタイミングで現在値を0に戻して 再び1から連番を振りたいんです。 ちなみにあるタイミングを、下記に簡単に例として書きます。 (1)ファイルから1レコードずつデータを読み込む。 (1)初回は何もチェックせずInsertをし、先頭から4バイトまでの値を変数に格納 (2)2レコード目以降は、先頭から4バイトまでの値を前回の値(変数)と比較 True(値が同じ) ⇒順番に連番を振る False(値が違う) ⇒新たに0から連番を振る。 変わった値を変数に格納する。 (2)Insertをする。 私の知っている知識で行けば、シーケンスは1テーブルで一つのシーケンス しか使用できなかったはずですが・・・なにぶん知識がないので、もしか したら出来たのかな?と思ったので質問しました。 上に書いた事が可能であるかどうか教えてください。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Oracleのマニュアルを見ると、新しい番号で始めたい 場合はdrop & createしなさい、と書いてあります。 それができないなら、次の方法でできるかも??? (全く自信なし) alter sequence シーケンス名 increment by (101 - 現在の値); select シーケンス名.nextval from dual; alter sequence シーケンス名 increment by 1; これらは同一トランザクションで行ってください。 これでできなかったら、あきらめてdrop & create するか、 もしくは番号を管理するテーブルを別に作って、 自分で番号を管理するしかないでしょう。
その他の回答 (1)
- MovingWalk
- ベストアンサー率43% (2233/5098)
最近は、Oracleを触っていませんので単なる思い付きです。 的外れでしたらごめんなさい。 Drop Sequece ? Create Sequence ? のようなことはできませんでしたっけ。 また、できたとしても不都合があるのでしょか?
お礼
どうもありがとうございます。 それは私も考えたのですが、このやり方はNGみたいです。
お礼
御礼が遅くなりまして大変すいません。 Drop&Createが「出来る!」という人と、「出来ない」と言う人がいて、 どっちなんだろう?と思いつつ、オラクルがまだ手元に無いため検証も 出来ず、ただ「どっち??」という感じです。 オラクルが手に入りましたら、試してみたいと思います。 どうもありがとうございました。