
前提: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ランキング
-
SQLで部分的にGROUP BYしたいとき
-
特定の日付が第何週目にあるか...
-
重複するIDのデータを1行にま...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
テーブルの主キーをdate型...
-
23時59分59秒までのデータを抽...
-
アクセスでの日付変換の仕方
-
Oracle11gのDATE型
-
Oracle10gのsql分についての質...
-
今日の日付が入った行のデータ...
-
WHERE句にて「30日前から今日ま...
-
関数IFで、指定日付範囲のデー...
-
日数算出SQL
-
SQLサーバで和暦から西暦に変換...
-
sysdateのフォーマットが変わり...
-
Oracleのorder byについて
-
DATE型の省略値について
-
日付書式に変換でこまっています!
-
日付型なら変数の先頭になん...
-
Excelグラフの日付軸の日付がず...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessの数値から時間に変換す...
-
SQLで部分的にGROUP BYしたいとき
-
重複するIDのデータを1行にま...
-
今日の日付が入った行のデータ...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
SQLサーバで和暦から西暦に変換...
-
oracle 文字列 01:45 を時間に...
-
テーブルの主キーをdate型...
-
日付書式に変換でこまっています!
-
日付型なら変数の先頭になん...
-
Excelグラフの日付軸の日付がず...
-
wordの差し込み印刷での日付表示
-
WHERE句にて「30日前から今日ま...
-
エクセル 日付による並べ替え...
-
SQL/Loaderでの年月日時分秒の...
-
DB2のSQL(日付)について
-
日付時刻+連番の主キーをSQLだ...
-
SQL ブレーク処理について
-
Exel関数で誕生日がきたら...
-
VBAについて
おすすめ情報