2013-08-20 19 views
6

Xnumber format elementto_numberで使用され、to_charではconverting hexadecimal numbers to decimal numbersとなっています。オラクルナンバーフォーマットモデル最大長

数値書式モデルの最大長は63文字ですが、the docsに記載されている制限は見つかりません。例えば。

datetime形式モデルの全長は22文字を超えることはできません。 63個のX ESに

:それは私の現在のタスクに関連しているとして、私は唯一のX書式要素を試してみました

SQL> select to_number('A', rpad('X', 64, 'X')) from dual; 
select to_number('A', rpad('X', 64, 'X')) from dual 
         * 
ERROR at line 1: 
ORA-01481: invalid number format model 

:64個のX ESに

SQL> select to_number('A', rpad('X', 63, 'X')) from dual; 

TO_NUMBER('A',RPAD('X',63,'X')) 
------------------------------- 
          10 

質問:

  1. これはただの文書から欠落している知られている数値書式モデルの制限ですか?
  2. 64桁(またはそれ以上)の桁の16進数を10進数に変換するにはどうすればよいですか?
+0

このような変換の目的は何ですか?数値で算術演算を行うか、単に保存して表示しますか? – ThinkJet

+0

@ThinkJetこれは、90年代半ば以降に実行されていた第三者レガシーハードウェアデバイスからのデータ読み込みです。新しいバージョンでは、これらのより大きい16進数フィールドが導入されました。それはいつも行われていたので変換が行われました - 誰もここに誰もいない理由は分かりません。ほこりの多いコーナーを掃除した後、私たちは最終的なシステムがこの特定のパフォーマンス指標を使用することはないことを認識しました。また、インジケータの目的がある時点で変更され、別々にデコードする必要のある複数のセグメントが含まれているように見えますが、誰も私たちに語っていません。ああ、メンテナンスプログラマーの喜び! – user272735

+1

私はあなたにメンテナンスの問題について共感します。後でこのインジケータを再度満たす場合は、['rawtohex'](http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions131.htm)と[' hextoraw']( http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions131.htm)変換および['UTL_RAW']関数(http://docs.oracle.com/cd/B28359_01/appdev .111/b28419/u_raw.htm)パッケージを使用して特定の読み取り値を抽出し、ビットレベルの操作を実行します。 – ThinkJet

答えて

2
+0

私はそうは思わない。 'bc'によると、小数点の最大64桁の16進数は約10です。 Oracleの 'number'(最大値:1.0 x 10^126 - 1)の範囲に非常によく適合するはずの' 1.2 x 10^77'です。 – user272735

+2

@ user272735絶対値は別のものです。有効数字の最大桁数は「精度」で、[数値は39桁または40桁に制限されています](http://docs.oracle.com/cd/E16655_01/server.121/e17209/sql_elements001.htm#SQLRF00222)。データ・タイプ。 – ThinkJet

+0

@ThinkJetああ、もちろんです!あなたのコメントの後で私はドキュメントを読むときに私が逃したものを実現しました。 igr私はupvoteできるようにあなたの投稿を編集してください。 – user272735