私はpl SQLでシーケンスを作成する方法を知っています。しかし、どのように私は3桁のすべての値を設定するのだろうか?私はシーケンスを作成するときにこれを行う別のSQL文がありますか?PL SQLでのシーケンス
ので例は次のようになります。
000
001
012
003
みんなありがとう!
私はpl SQLでシーケンスを作成する方法を知っています。しかし、どのように私は3桁のすべての値を設定するのだろうか?私はシーケンスを作成するときにこれを行う別のSQL文がありますか?PL SQLでのシーケンス
ので例は次のようになります。
000
001
012
003
みんなありがとう!
まず、単に明確にするために、あなたは、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.
はしばらくPLSQLを使用しますが、ここにいない:
は、整数のシーケンスmyseqを与え、
to_char(myseq.nextval, '009')
「009」とは何ですか? – HAxxor
@Johhy Cundall - おそらく '009'だけでなく 'fm009'が必要なことに注意してください。それ以外の場合、Oracleは余分な先頭のスペースを追加します。負の数を渡すと、位置合わせを維持しながらマイナス記号のための余裕があります。 –
009は数値書式モデルです。ここでそれについて読むことができます。http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm –
また、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を追加します。
ワウは非常に明確です。しかし、私はまだfm009とは混同しています。なぜ009ですか?私は3桁の制限がどこから来るかはわかりません。 – HAxxor
@NoobyBooby - '009'書式のマスクには、「3桁の文字列に数値を先頭に0で埋め込む」と書かれています。 'fm'形式のマスクには、通常、負の数値がレポート内で正しく整列するように通常予約する先行スペースを削除します。 0の文字列を4文字にしたい場合は、 'fm0009'を使います。 –
ジャスティンの素晴らしい投稿に加えて、私はちょうどこれを追加します:データはいつも数字になりますか?3桁と先行ゼロは表示要件ですが、正しいですか?もしそうなら、シーケンス値をテーブルのNUMBERデータ型に格納し、出力にTO_CHAR()関数を使用してデータを適切にフォーマットする必要があると主張します。 –