■SI Object Browser 掲示板
|
ユーザの皆様、開発者、サポート担当者の交流のための掲示板です! ユーザーの皆様同士で教え合ったりもできる交流の場にしたいと思っていますので、相互協力をよろしくお願いします。 なお、過去に同じようなQ&Aがあるケースも多いので、投稿前にキーワード検索してみてください。 |
|
| ※各投稿のカラーは対象となる製品に対応しています。【■…OB ■…OBER ■…全般 ■…その他】 ※ライセンスに関するお問合せにつきましては、お問い合わせページよりご連絡いただきますようお願いいたします。 ※誹謗中傷や公序良俗に反する書き込みはご遠慮ください。運営側の判断によりメッセージを削除する場合があります。 ※環境依存や技術的調査が必要な問題については掲示板上ではお答えしかねます。ご了承ください。 | |
データ生成ツールでのシーケンス利用時の文字制限
2009/02/13 18:42
OB
1
ちゃこ
お世話になります。
データ生成ツールにて質問があります。(Ver9.1.0.0)
varchar2(12)のカラムに、固定値で
to_char(reg_num.nextval,'000000000000')
を記述すると、
ORA-12899:列★★の値が大きすぎます(実際:13、最大12)
とエラーが発生します。
しかし、上記で指定したとおり'000000000000'は12桁です。
SQL実行画面で
select to_char(reg_num.nextval,'000000000000') from dual;
とすると正常に12桁で表示されます。
生成文字列以外に1バイト余計に入っているのでしょうか?
また必ず12バイトの文字列を順序で作成したいので、他に方法はあるのでしょうか?
よろしくお願いいたします。
データ生成ツールにて質問があります。(Ver9.1.0.0)
varchar2(12)のカラムに、固定値で
to_char(reg_num.nextval,'000000000000')
を記述すると、
ORA-12899:列★★の値が大きすぎます(実際:13、最大12)
とエラーが発生します。
しかし、上記で指定したとおり'000000000000'は12桁です。
SQL実行画面で
select to_char(reg_num.nextval,'000000000000') from dual;
とすると正常に12桁で表示されます。
生成文字列以外に1バイト余計に入っているのでしょうか?
また必ず12バイトの文字列を順序で作成したいので、他に方法はあるのでしょうか?
よろしくお願いいたします。
返信を投稿
OB
後迫@SI
こんにちは
後迫@SIです。
このたびは返信が遅くなってしまい申し訳ございません。
現象につきまして確認いたしました。
原因につきましてですが、
0埋めのフォーマットでTO_CHAR関数を使用した場合、
先頭に余計な半角スペースが付加されるためのようです。
(SQL*Plusでも発生したため、おそらくOracleの不具合と思われます。)
例えば、
select length(to_char(reg_num.nextval,'000000000000')) from dual
とした場合は13と表示されると思いますので、ご確認いただけますでしょうか。
また、回避策につきましてですが、
TRIM関数またはLPAD関数を使用することで、12桁にできますので、
お試しいただいてもよろしいでしょうか。
■TRIM関数を使用する場合
select trim(to_char(reg_num.nextval,'000000000000')) from dual
■LPAD関数を使用する場合
select lpad(to_char(reg_num.nextval),12,'0') from dual
お手数をおかけしてしまい申し訳ございませんが、
何卒よろしくお願いいたします。
後迫@SIです。
このたびは返信が遅くなってしまい申し訳ございません。
現象につきまして確認いたしました。
原因につきましてですが、
0埋めのフォーマットでTO_CHAR関数を使用した場合、
先頭に余計な半角スペースが付加されるためのようです。
(SQL*Plusでも発生したため、おそらくOracleの不具合と思われます。)
例えば、
select length(to_char(reg_num.nextval,'000000000000')) from dual
とした場合は13と表示されると思いますので、ご確認いただけますでしょうか。
また、回避策につきましてですが、
TRIM関数またはLPAD関数を使用することで、12桁にできますので、
お試しいただいてもよろしいでしょうか。
■TRIM関数を使用する場合
select trim(to_char(reg_num.nextval,'000000000000')) from dual
■LPAD関数を使用する場合
select lpad(to_char(reg_num.nextval),12,'0') from dual
お手数をおかけしてしまい申し訳ございませんが、
何卒よろしくお願いいたします。
返信を投稿
OB