
前提:ORACLE
「一番古いレコードを取得する。」というのが条件です。
これを満たすだけであればSEQENCE等で連番を振れば満たせます。
しかし、日付時刻+連番であればカラム一つで時刻まで把握できます。
(日付時刻を利用することはありませんが、付加価値?として。)
というわけで、日付時刻+連番(桁固定のサイクリック)の主キーを使いたいのですが、
以下のように同時刻で連番が先頭に戻ると順番が守れません。
時刻A9999
時刻A0000 ← あとから挿入したのに同時刻の先頭になる
プログラムであれば同時刻なら連番を先頭から使うことも簡単ですが、
このよなことをSQL側だけでできるのでしょうか?
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
シーケンスを使う方法としては、1分以内に9999を超えることがないなら、
シーケンスを1分毎に0にリセットして使えばいいと思いますし、
他の方法としては、
連番 = (select nvl((select max(連番)+ 1 from テーブル
where 連番 like to_char(sysdate,'hhmiss') || 'A%')
,to_char(sysdate,'hhmiss') || 'A0001')
from dual)
で既に登録されたデータに1を加えてもいいと思いますが。
※どちらも秒単位で連番という仕様で書いています。
単に連番で付けている番号だけでサイクリックにすると質問の現象は防げません。
(防ぐためには、サイクリックにはできません。どこかでリセットするか十分に大きな桁数をとるか
いづれかが必要です。)
なお、同時に複数のコミットされていないデータが発生する
(DB側が、2CPU以上で同時に処理されている)というのなら、不可能。
(複数のCPUをまたいで連番を共有することはプログラムでもできっこないです。)
・・・2CPU以上で同時に処理されているのでなければミリ秒まで同一のデータが出来るのは
あまり起きないと思うのですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
棒読みちゃんが起動できないの...
-
子供向けプログラミングのスク...
-
osqleditについて
-
オラクル12C_SQLPlusで実行す...
-
sqlで質問です。 Aテーブルは店...
-
SQLの中上級者へのレベルアップ...
-
SELECTによる表の変換方法を教...
-
開発対象となるアプリケーショ...
-
質問です。 下記のテーブルとデ...
-
Oracleですがsqlで質問です。 ...
-
sqlで質問です。 Aテーブルの登...
-
sqlで質問です。 Aテーブルの情...
-
SQLの書き方について
-
SQLについて教えて下さい。 主...
-
sqlで質問です。 idを元にidに...
-
oracleで 10,20, 30, というデ...
-
索引作成について
-
googleプレイの履歴で取得とイ...
-
sql(oracle)で質問です。 テ...
-
オラクルゴールドについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複するIDのデータを1行にま...
-
Accessの数値から時間に変換す...
-
SQLで部分的にGROUP BYしたいとき
-
wordの差し込み印刷での日付表示
-
SQLサーバで和暦から西暦に変換...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
日付型なら変数の先頭になん...
-
テーブルの主キーをdate型...
-
SQL ブレーク処理について
-
今日の日付が入った行のデータ...
-
23時59分59秒までのデータを抽...
-
DB2のSQL(日付)について
-
ExcelのSUMPRODUCTで日付の範囲...
-
日付書式に変換でこまっています!
-
4バイトの日付データを、16進数...
-
oracle 文字列 01:45 を時間に...
-
VARCHAR2とNUMBERで事足りる?
-
最新日付のデータを取得したい
-
日付の切り出し方法について
-
OSのシステム日付を変更して...
おすすめ情報