• ベストアンサー

年度毎にシーケンスの初期化?

こんにちは あるプロジェクトでIDの連番を生成していますが、 年度毎に1から振り直します。 例:2009_001,2009_002... 2010_001... Oracleの順序(シーケンス)を使うとしたら、年度毎にどうやって順序を初期化するのでしょうか? そもそもこの場合、開発では順序を利用するべきではないでしょうか? よろしくお願いします。

  • Oracle
  • 回答数1
  • ありがとう数4

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

  • ベストアンサー
  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.1

年度毎のシーケンスを持てばいいのではないでしょうか。 要件次第ですが、年度が変わっても過去のデータを作成する必要はないのですか。1つのシーケンスを使い回すと、前の年度で作成された番号がまた採番されてしまいます。そこで過去年度のデータを作ろうとすると、番号が重複してしまいます。 年度末に休んでいて、年度が変わってから出社して入力したら、番号が重複して入力できないのは変ですよね。 プログラムで年度を判定しシーケンスを使い分けてあげるのはどうでしょうか。翌年度用のシーケンスは年次処理で作成するジョブを用意しておけばOKでしょう。 絶対に過去年度のデータは作成されないのなら、年次処理(4月01日00時00分に起動する)でシーケンスを初期化するジョブを組めばよいと思います。 シーケンスを使わないなら、採番テーブルを作ってロジックで管理するしかないと思います。その場合でも、年度毎に持っておいた方が無難だと思います。

関連するQ&A

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

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

  • MySQLでシーケンス番号の前後数を知りたい

    user_table ---------------------------- id | group_id | sequence| name | ---------------------------- 1 | 1 | 1 | emi | ---------------------------- 2 | 1 | 2 | shun | ---------------------------- 3 | 2 | 1 | yumi | ---------------------------- 4 | 1 | 5 | jo | … group_idごとにシーケンス番号(グループ内のユニーク番号)を振っています。 shun(group_id=1,sequence=2)のページでシーケンス番号の前後を取りたいのですがどうすればいいでしょうか? すでに辞めたユーザもいるためシーケンス番号は必ず連続しているとは限らず、抜けている場合もあります。 例として、shun(group_id=1,sequence=2)の前後を取る場合はemiとjoのシーケンス番号を取得したいのです。 下記で出来ましたがサブクエリなしでもできそうなのとあまりきれいでないのでご教示お願いいたします。 select (select min(sequence) from t_files where album_id=1 and sequence>2) next,( select min(sequence) prev from t_files where album_id=1 and sequence<2) prev;

    • ベストアンサー
    • MySQL
  • oracleの順序のexp/impにつて

    oracleの順序のEXP/IMPについてです。 oracle 11gでlinuxなのですが、別サーバ上にあるAというスキーマ(例:hon1)の シーケンスを、別サーバ上にあるBというスキーマ(例:dev1)に、expdp/impdp コマンドで、sequenceのみを、export/importをしようとしています。 expdpコマンドでsequenceのみはexportできたのですが、impdpコマンドで、sequence をimportするとエラーがでて失敗します。 SEQUENCEの処理はできるのですが、OBJECT_GRANTの作成でエラーで失敗します。 別環境の別スキーマに入れようとしているので、権限の作成で失敗するのは当たり前 かもしれませんが。 回避する方法、grantを実行しない方法はないのでしょうか。 また、表のimportみたいに、記述したテーブルのみをimportするような、ターゲットの sequenceのみをimportするような記述はできないのでしょうか。 宜しくお願い致します。 環境:oracle 11g、Linux

  • MYSQLデータの書き換えについて

    MYSQLで複数のユーザーと、複数のアイテムがあり、アイテムには表示順序を設定できるとします。 レコードの例は次のようになっています。 「ユーザーID / アイテムID /表示順序」 例: ユーザー1 / アイテムA / 1 ユーザー1 / アイテムB / 2 ユーザー1 / アイテムC / 3 表示順序は1から始まる連番で管理されていて、数字の大きなものから順に並びます。 各ユーザーが持つアイテムの種類はバラバラで、何も持っていないユーザーも存在します。 上の例の場合ユーザー1はアイテムABCを持ち、表示順序はCBAです。 そこで、あるユーザーのアイテムの順序を振り直す場合、一度そのユーザーのレコードを全て削除してから新規に振り直そうと思っていますがこのやりかたは正しいでしょうか? それともUPDATEをうまく使って書き換えるほうがいいのでしょうか?

  • 年度またがるクレジット決済について

    青色申告、個人事業主です。 年度をまたがるクレジット決済についてご質問します。 H22.11月からH23.1/15までに利用したクレジットの引き落としが H23.2月にあります。 同年中の利用、支払いは未払いをたてて記帳しているのですが 年度をまたがるときの仕訳は(下記参照)どうすればいいでしょうか? 例 H22.11~H22.12/31 カード利用  10万円 H23.1/1~1/15    カード利用   5万円 H22年度は未払いをたてていませんでした。 カード利用分は今年から未払いをたてて記帳していきたいのですが 2/15 引き落としが15万円(前年度分込)の場合の仕訳をどうすればいのか わからないのです。 同年中だと (例) H23.1/1~1/15    カード利用   5万円    2/15 引き落としの場合 (仕訳) 経費  50000円      未払い50000円 2/15 未払い金 50000円    預金 50000円 でいいと思うのですが、昨年度分の処理に困っております。 預金残高を合わせるとき、2/15引き落としに前年度経費が入っているとき (去年度は未払い立てていない場合)の仕訳教えてください。

  • シーケンス型で取得した値を別テーブルで利用する方法

    シーケンス型で取得した値を別テーブルで利用する方法を別テーブルの設定したい場合,どうすればいいでしょうか. 例えば,商品情報が入っている商品テーブルのidを価格テーブルに結びつけたい場合 ・トランザクション開始 ・商品テーブルにinsert ・コミット ・トランザクション開始 ・シーケンスより最大値を取得 ・価格テーブルにシーケンスより得られた値を含めてinsert ・コミット このままですと価格テーブルの時に何らかの問題でロールバックした場合,商品テーブルには価格テーブルと関係性がないレコードができてしまいます.

  • iPhoneの初期化後にIDがわからない

    やむを得ずiPhoneを初期化しました。その後の初期設定で、アップルIDとパスワードのどちらも忘れていたことが判明しました。 入力できないのでiPhoneは使えません。 IDとパスワードをリセットするしかないのでしょうか? その場合、利用していたicloudにバックアップしていたデータは取り出せなくなってしまうのでしょうか? 私の認識ではicloudのサインインにもアップルIDが必要だったと思うので。 どのようにしたら良いのか教えてください。

  • 連番のファイルをDOSコマンドで

    DOSコマンドを利用し、バッチ処理でタスクスケジューラーにて、定期的に、テキストファイルへリダイレクトするのですが、ファイルネームを連番で生成してくれる、コマンド(構文?)をご教授下さい。 例:ipconfig >***.txt (***の部分を連番)

  • ドロップダウンリストの初期表示値の指定

    SqlDataSource と関連付けた ドロップダウンリストが 2つあります。 1つは年度の選択を行い、もう1つは選択した年度に 該当する月を、表示・選択させます。 月を選択するドロップダウンリストにおいて、Form起動 時の初期表示の値として、SqlDataSource 内の最大値を 表示させたいのです。 <例:2008/12/25 現在 の場合> ●2007年度を指定した場合 ・2008/3 が最終月のため、「03」をセット。 ・SqlDataSource内には、2007/4 ~ 2008/3 までのデータが必ず存在する。 ●2008年度を指定した場合 ・2008/12 が最終月のため、「12」をセット。 ・但し、2008/12 のデータが無い場合が想定される ため、SqlDataSource内の最大値を特定しセットし たい。 上記の例は、あまり良い例ではないと思いますが、やり たいことは、SqlDataSourceで取得した値の中から、最大 値を特定し初期値として表示することです。 どなたかご存じないですか? ASP2.0 言語:VB

  • 一意(ユニーク)かつ、ソートに対してランダムなIDの発行方法

    随時増加するあるデータに対して、一意なIDを割り当ててゆきます。 通常は、1, 2, 3, … と連番を割り当てて行けば一意なIDになると思います。 その上で、IDでソートした時に発行順に並ぶのではなく、順番がランダムになるようにしたいのです。 (アルゴリズムを知らない人から、発行順を推測されないようにしたい。) そこで考えたのが、"1", "2", "3", …という文字列に対するハッシュ(SHA1やMD5)ですが、sha1("1"), sha1("2"), sha1("3"), …とIDを発行していった場合、IDが重複してしまう可能性を心配しています。(とても低い確率ではあることは分かっていますが、皆無ではありません。) ハッシュ関数を利用する他に、「一意」で「ランダム」で「衝突の可能性がゼロ」である文字列の生成方法はありませんでしょうか?(可能性がゼロというのは物理的に不可能だと思うので、例えばSHA-1であれば、160bitのハッシュが生成されますが、2^160個のIDを発行しても重複しない、ということを考えます。) 一応、規模は1000万ID程度を考えていますが、もっと大きなオーダーでも衝突しないに越したことはありません。