2011-11-29 23 views
1

私はpl SQLでシーケンスを作成する方法を知っています。しかし、どのように私は3桁のすべての値を設定するのだろうか?私はシーケンスを作成するときにこれを行う別のSQL文がありますか?PL SQLでのシーケンス

ので例は次のようになります。

000 
001 
012 
003 

みんなありがとう!

答えて

8

まず、単に明確にするために、あなたは、PL/SQLでシーケンスを作成しないでください。 SQLではシーケンスを作成することしかできません。

第二に、あなたは正確に3桁の数字を格納するための列をしたい場合は、定義によりNUMBERが先行ゼロを格納していないので、あなたはVARCHAR2(またはいくつかの他の文字列型)ではなく、より一般的なNUMBERするデータ型を必要とします。もちろん、そうすることはできますが、それは珍しいことです。

これは、 "fm009"形式のマスクを使用して、数値シーケンスから正確に3文字の文字列を生成することができます( "fm"ビットは、スペースを追加しないことを保証するために必要です。 TRIMの結果をTO_CHARと同様に呼び出し、マスクの「fm」ビットを除去します)。

SQL> create table t(col1 varchar2(3)); 

Table created. 

SQL> create sequence t_seq; 

Sequence created. 

SQL> ed 
Wrote file afiedt.buf 

    1 insert into t 
    2 select to_char(t_seq.nextval, 'fm009') 
    3  from dual 
    4* connect by level <= 10 
SQL>/

10 rows created. 

SQL> select * from t; 

COL 
--- 
004 
005 
006 
007 
008 
009 
010 
011 
012 
013 

10 rows selected. 
+0

ワウは非常に明確です。しかし、私はまだfm009とは混同しています。なぜ009ですか?私は3桁の制限がどこから来るかはわかりません。 – HAxxor

+2

@NoobyBooby - '009'書式のマスクには、「3桁の文字列に数値を先頭に0で埋め込む」と書かれています。 'fm'形式のマスクには、通常、負の数値がレポート内で正しく整列するように通常予約する先行スペースを削除します。 0の文字列を4文字にしたい場合は、 'fm0009'を使います。 –

+2

ジャスティンの素晴らしい投稿に加えて、私はちょうどこれを追加します:データはいつも数字になりますか?3桁と先行ゼロは表示要件ですが、正しいですか?もしそうなら、シーケンス値をテーブルのNUMBERデータ型に格納し、出力にTO_CHAR()関数を使用してデータを適切にフォーマットする必要があると主張します。 –

3

はしばらくPLSQLを使用しますが、ここにいない:

は、整数のシーケンスmyseqを与え、

to_char(myseq.nextval, '009') 
+0

「009」とは何ですか? – HAxxor

+3

@Johhy Cundall - おそらく '009'だけでなく 'fm009'が必要なことに注意してください。それ以外の場合、Oracleは余分な先頭のスペースを追加します。負の数を渡すと、位置合わせを維持しながらマイナス記号のための余裕があります。 –

+2

009は数値書式モデルです。ここでそれについて読むことができます。http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm –

0

また、lpad機能を使用することもできます。

Oracle/PLSQLのlpad関数は、文字列の左側に特定の文字セットを埋め込みます。例えば

:文字列が8文字未満の長さである場合は、

lpad('tech', 8, '0'); would return '0000tech' 

すなわちを使用することになり、あなたの例では

lpad('tech', 7); would return ' tech' 
lpad('tech', 2); would return 'te' 
lpad('tech', 8, '0'); would return '0000tech' 
lpad('tech on the net', 15, 'z'); would return 'tech on the net' 
lpad('tech on the net', 16, 'z'); would return 'ztech on the net' 

、文字列があるまで、文字列の先頭に0を追加8文字です。

参考:またhttp://www.techonthenet.com/oracle/functions/lpad.php

、あなたはRPAD関数を使用することができます右に0を追加します。