2013-08-20 15 views
6

I to_number ve to_char kullanılan Xnumber format element tuhaf bir sınır çalıştırın.Oracle sayı formatında modeli maksimum uzunluğu

Sayı biçimi modelinin maksimum 63 karakter uzunluğunda olduğu anlaşılıyor ancak the docs numaralı belgede belirtilen sınırı bulamıyorum. Örneğin. datetime formatı modelinin maksimum uzunluğu belirtilir:

Tarihçe biçimindeki bir modelin toplam uzunluğu 22 karakteri aşamaz. 63 X es ile

: benim şimdiki görev için uygun olduğu gibi sadece X biçimi elemanı denedi

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 ile

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

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

.

sorular:

  1. bu sadece belgelere eksik bilinen bir sayı biçimi modeli sınırlaması var mı?
  2. 64 (ve daha uzun) basamak uzunluğundaki onaltılık bir sayıyı ondalık sayıya nasıl dönüştürebilirim?
+0

Böyle bir dönüşümün amacı nedir? Sayı değerleri ile bazı aritmetik yapın veya sadece saklayın ve gösterin? – ThinkJet

+0

@ThinkJet Bu, 90'ların ortasından bu yana çalışan bir üçüncü taraf eski donanım aygıtından alınan bir veri yüklemesidir. Yeni bir sürüm bu büyük onaltılık alanları tanıttı. Dönüşüm her zaman yapıldığı için yapıldı - burada kimse neden olduğunu bilmiyor. Tozlu köşeleri temizledikten sonra, uç sisteme bu özel performans göstergesini artık kullanamayacağımızı fark ettik, böylece düşebiliriz (ne rahatlama). Ayrıca, göstergenin amacının bir noktada değiştiği ve ayrı olarak kodu çözülmesi gereken birkaç bölüm içerdiği anlaşılıyor ama kimse bize söylemedi. Oh, bir bakım programcısının sevinçleri! – user272735

+1

Tamam. Bakım sorunları konusunda size sempati duyuyorum. Bir süre sonra tekrar bu gösterge ile karşılaşırsanız, ['rawtohex'] (http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions131.htm) ve [' hextoraw'] (http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions131.htm) dönüşüm yapmak için işlevler ve ['UTL_RAW'] (http://docs.oracle.com/cd/B28359_01/appdev .111/b28419/u_raw.htm) Belirli okumaları ayıklamak ve bit düzeyinde işlemler gerçekleştirmek için paket. – ThinkJet

cevap

2

hassas NUMBER artık gidebilir. Resmi belgelerde daha fazla bilgi için: http://docs.oracle.com/cd/E16655_01/server.121/e17209/sql_elements001.htm#SQLRF00222

+0

Sanmıyorum. Bc'ye göre ondalık olarak en büyük 64 haneli onaltılık sayı yakl. Oracle 'number' aralığına çok iyi uyan 1.2 x 10^77 '(maksimum değer:' 1.0 x 10^126 - 1'). – user272735

+2

@ user272735 Mutlak değer farklı bir şeydir. "Sayı" için anlamlı basamak sayısı "duyarlık" ve [39 veya 40 ondalık basamakla sınırlı] (http://docs.oracle.com/cd/E16655_01/server.121/e17209/sql_elements001.htm#SQLRF00222) sayısıdır. veri tipi. – ThinkJet

+0

@ThinkJet Ah, ama elbette! Sadece yorumunuzdan sonra belgeleri okurken ne kaçırdığımı anladım. lütfen yazınızı düzenleyebilmem için teşekkürler. – user272735

İlgili konular