2013-08-20 21 views
6

biegnę do swoistej granicy w Xnumber format element stosowanych w to_number aw to_char kiedy byłem converting hexadecimal numbers to decimal numbers.Oracle numer Format modelu Maksymalna długość

Wygląda na to, że model formatu liczb ma maksymalną długość 63 znaków, ale nie mogę znaleźć limitu wymienionego w the docs. Na przykład. podana jest maksymalna długość modelu formatu datetime:

Całkowita długość modelu formatu datetime nie może przekraczać 22 znaków.

W 63 X es:

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

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

W 64 X ES:

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 

próbowałem tylko X formatu elementu, ponieważ jest to istotne dla mojego obecnego zadania.

pytania:

  1. Czy to jest znanym modelem ograniczenie format numeru, który jest po prostu brakuje dokumentacji?
  2. Jak przekonwertować 64-znakową i szesnastkową liczbę szesnastkową na liczbę dziesiętną?
+0

Jaki jest cel takiej konwersji? Czy niektóre arytmetyczne z wartości liczbowych lub po prostu przechowywać i pokazać? – ThinkJet

+0

@ThinkJet Jest to ładowanie danych ze starszego urządzenia sprzętowego innej firmy, działającego od połowy lat 90-tych. Nowa wersja wprowadziła te większe pola szesnastkowe. Konwersja została wykonana, ponieważ zawsze było zrobione - nikt tutaj nie wie, dlaczego. Po wyczyszczeniu zakurzonych naroży zdaliśmy sobie sprawę, że system końcowy nie używa już tego konkretnego wskaźnika wydajności, więc możemy go po prostu upuścić (co za ulga). Wygląda również na to, że cel wskaźnika zmienił się w pewnym momencie i zawiera kilka segmentów, które należy rozszyfrować osobno, ale nikt nam nie powiedział. Och, radości programisty konserwacji! – user272735

+1

Ok. Sympatyzuję z tobą w kwestiach związanych z konserwacją. Jeśli kiedyś później ponownie napotkasz ten wskaźnik, spójrz na ['rawtohex'] (http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions131.htm) i [' hextoraw'] (http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions131.htm) funkcje do konwersji i ['UTL_RAW'] (http://docs.oracle.com/cd/B28359_01/appdev .111/b28419/u_raw.htm), aby wyodrębnić określone odczyty i wykonać operacje na poziomie bitowym. – ThinkJet

Odpowiedz

2

Wykracza poza precyzję NUMBER można przejść. Więcej informacji w oficjalnej dokumentacji: http://docs.oracle.com/cd/E16655_01/server.121/e17209/sql_elements001.htm#SQLRF00222

+0

Nie sądzę. Według "bc" największa 64-cyfrowa liczba szesnastkowa w systemie dziesiętnym wynosi w przybliżeniu. '1,2 x 10^77', które powinno pasować bardzo dobrze do zakresu Oracle' number' (wartość maksymalna: '1.0 x 10^126 - 1'). – user272735

+2

@ user272735 Wartość bezwzględna to coś innego. Maksymalna liczba cyfr znaczących to "precyzja" i [ograniczona do 39 lub 40 cyfr dziesiętnych] (http://docs.oracle.com/cd/E16655_01/server.121/e17209/sql_elements001.htm#SQLRF00222) dla "liczby" typ danych. – ThinkJet

+0

@ThinkJet Ah, ale oczywiście! Dopiero po twoim komentarzu zdałem sobie sprawę z tego, co straciłem, gdy czytałem dokumentację. igr, edytuj swój post, abym mógł awansować. – user272735

Powiązane problemy