C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: オラクル:採番を作りたいです


(過去ログ 72 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■41783 / inTopicNo.1)  オラクル:採番を作りたいです
  
□投稿者/ gogle (1回)-(2009/09/30(Wed) 15:21:50)

分類:[C#] 

今使っているDBは オラクルです。

SQL文で 採番を作りたいですが、教えてください。


   ※(入力)日付+連番→(200909300001)
    日付 年4桁+月2桁+日2桁+連番(0000から)

よろしく、お願いいたします。

   
引用返信 編集キー/
■41789 / inTopicNo.2)  Re[1]: オラクル:採番を作りたいです
□投稿者/ ふるふる (28回)-(2009/09/30(Wed) 16:31:41)
オラクルなら、Create Sequence でSEQオブジェクトを作れます。
Create Sequence を確認してください。引数によってどういう順番(開始数値とか)なのかを定義できます。
SEQを作ったら、NextValプロパティで次の連番が取得できます。
数値型なので適宜文字列編集をして、欲しい形の連番に直してください。




No41783 (gogle さん) に返信
> 今使っているDBは オラクルです。
>
> SQL文で 採番を作りたいですが、教えてください。
>
>
>    ※(入力)日付+連番→(200909300001)
>     日付 年4桁+月2桁+日2桁+連番(0000から)
>
> よろしく、お願いいたします。
>
>    
引用返信 編集キー/
■41791 / inTopicNo.3)  Re[2]: オラクル:採番を作りたいです
□投稿者/ gogle (2回)-(2009/09/30(Wed) 16:58:31)
Create Sequence というのはテーブルが変更されますか?

テーブルの変更はできません。

C# プログラム .cs中でSQL文を読んで連番を取得したいのです。
  
  ※(条件は) 画面での入力日付+連番→(200909300001)をテーブルにインサートします。

      ※(入力)日付+連番→(200909300001)

      日付 年4桁+月2桁+日2桁+連番(0000から)です。


  例:テーブルAAAAの NMBERという項目のMAX値の右4桁を+1した値を取得したいです。
でもテーブルにデータがない時はどういう関数で、解決できるんですか?いろいろ
    今自分も調べていますが、うまく行きません。

    よろしく、お願いいたします。




引用返信 編集キー/
■41793 / inTopicNo.4)  Re[3]: オラクル:採番を作りたいです
□投稿者/ たくボン (226回)-(2009/09/30(Wed) 17:14:19)
No41791 (gogle さん) に返信
> Create Sequence というのはテーブルが変更されますか?
>
> テーブルの変更はできません。
>
> C# プログラム .cs中でSQL文を読んで連番を取得したいのです。
>   
>   ※(条件は) 画面での入力日付+連番→(200909300001)をテーブルにインサートします。

日付の末尾4桁の連番を取得したいのなら、likeとmaxを使えば取得できない?

select max(hoge)+1
from hoge_table
where hoge like '20090903%'

引用返信 編集キー/
■41803 / inTopicNo.5)  Re[4]: オラクル:採番を作りたいです
□投稿者/ Jitta on the way (447回)-(2009/09/30(Wed) 18:25:17)
No41793 (たくボン さん) に返信
> ■No41791 (gogle さん) に返信
>>Create Sequence というのはテーブルが変更されますか?

テーブルは、変更されません。テーブルは、「CREATE TABLE」で作ります。ここでは、「SEQUENCE」を作っています。
(面倒だったので、反則ごめんなさい)



>>
>>テーブルの変更はできません。
>>
>>C# プログラム .cs中でSQL文を読んで連番を取得したいのです。
>>  
>>  ※(条件は) 画面での入力日付+連番→(200909300001)をテーブルにインサートします。
>
> 日付の末尾4桁の連番を取得したいのなら、likeとmaxを使えば取得できない?
>
> select max(hoge)+1
> from hoge_table
> where hoge like '20090903%'
>

hoge は、文字列?数値との、数値としての演算って、出来るの?
引用返信 編集キー/
■41809 / inTopicNo.6)  Re[5]: オラクル:採番を作りたいです
□投稿者/ たくボン (231回)-(2009/09/30(Wed) 18:41:38)
No41803 (Jitta on the way さん) に返信
> ■No41793 (たくボン さん) に返信
>>■No41791 (gogle さん) に返信

> hoge は、文字列?数値との、数値としての演算って、出来るの?

あくまで例題で書いただけなので、hogeは列名です。

select MAX(to_char(hoge, 'yyyymmdd'))+1
from hoge_table
where to_char(hoge, 'yyyymmdd') like '20090%'

一応SQL Plusでは確認してますよ。列名とテーブル名は公開したらまずいので変えましたが。
Oracleは10gで確認しています。(hogeは日付型)

引用返信 編集キー/
■41813 / inTopicNo.7)  Re[6]: オラクル:採番を作りたいです
□投稿者/ Jitta on the way (448回)-(2009/09/30(Wed) 19:23:57)
No41809 (たくボン さん) に返信

>>hoge は、文字列?数値との、数値としての演算って、出来るの?
>
> あくまで例題で書いただけなので、hogeは列名です。

はい、それは承知です。

>
> select MAX(to_char(hoge, 'yyyymmdd'))+1
> from hoge_table
> where to_char(hoge, 'yyyymmdd') like '20090%'
>
> 一応SQL Plusでは確認してますよ。列名とテーブル名は公開したらまずいので変えましたが。
> Oracleは10gで確認しています。(hogeは日付型)
>

VB みたいな変換をしてくれるんですね。気付かなかった…と言うか、試そうとも思わなかった。
引用返信 編集キー/
■41854 / inTopicNo.8)  Re[7]: オラクル:採番を作りたいです
□投稿者/ ふるふる (29回)-(2009/10/01(Thu) 15:31:39)
解決方法として、今2通りの方法が上がっています。それぞれの注意点を提起しておきます。

(1) Sequenceを使う方法
 Sequenceはテーブルとは別のオブジェクトなので、NextValで常に次の値を持ってきてくれます。
 これは逆に言うと、日付の中で連番が作られるわけではない、ということです。
 200909300001,200909300002, 200909300003
 が作られ、次の日には
 200910010004
 から作られる、ということです。

(2) Max+1を使う方法
 これは日付ごとに0001からの連番を作成できます。問題としては、トランザクションをきちんと
 考えないといけないということです。
 同時に複数のユーザーからの実行で、同一の連番が作成されてしまう、という問題が発生するでしょう。
 レコードがない場合にはMax+1 の代わりに、1を使うようにすれば良いでしょう。あるいはNVL関数で0に変換するとか。

 
 

引用返信 編集キー/
■41874 / inTopicNo.9)  Re[8]: オラクル:採番を作りたいです
□投稿者/ Jitta on the way (450回)-(2009/10/02(Fri) 07:16:21)
No41854 (ふるふる さん) に返信
> 解決方法として、今2通りの方法が上がっています。それぞれの注意点を提起しておきます。

その他、「要件に合うか」、吟味する必要もありますね。

シーケンスで処理すれば、追加処理の途中でキャンセルしたとき、飛び番が発生します。
どちらの方法でも、削除したデータが持っていた番号は抜けになります。

抜けを許すのかどうか。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -