ho eseguito in un limite peculiare X
number format element usato in to_number
e to_char
quando ero converting hexadecimal numbers to decimal numbers.Oracle numero formato modello lunghezza massima
Sembra che il modello in formato numerico abbia una lunghezza massima di 63 caratteri, ma non riesco a trovare il limite indicato in the docs. Per esempio. viene indicata la lunghezza massima del modello di formato datetime:
La lunghezza totale di un modello di formato datetime non può superare i 22 caratteri.
Con 63 X
es:
SQL> select to_number('A', rpad('X', 63, 'X')) from dual;
TO_NUMBER('A',RPAD('X',63,'X'))
-------------------------------
10
Con 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
ho provato solo X
elemento formato è rilevante per la mia attività corrente.
Le domande:
- Si tratta di un noto limite modello di formato numerico che è appena manca dalla documentazione?
- Come si converte un numero esadecimale di 64 (e più lungo) numero di cifre in un numero decimale?
Qual è lo scopo di tale conversione? Fai qualche calcolo aritmetico con valori numerici o semplicemente memorizza e mostra? – ThinkJet
@ThinkJet Si tratta di un caricamento di dati da un dispositivo hardware legacy di terze parti in esecuzione dalla metà degli anni '90. Una nuova versione ha introdotto questi campi esadecimali più grandi. La conversione è stata fatta perché è sempre stata fatta - nessuno qui sa perché. Dopo aver pulito alcuni angoli polverosi ci siamo resi conto che il sistema finale non utilizza più questo indicatore di prestazioni specifico, quindi potremmo semplicemente lasciarlo cadere (che sollievo). Sembra anche che lo scopo dell'indicatore sia cambiato a un certo punto e contiene diversi segmenti che devono essere decodificati separatamente ma nessuno ci ha detto. Oh, le gioie di un programmatore di manutenzione! – user272735
Ok. Sono solidale con te per i problemi di manutenzione. Se qualche volta dopo incontri nuovamente questo indicatore, dai un'occhiata a ['rawtohex'] (http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions131.htm) e [' hextoraw'] (http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions131.htm) funzioni per effettuare la conversione e ['UTL_RAW'] (http://docs.oracle.com/cd/B28359_01/appdev .111/b28419/u_raw.htm) pacchetto per estrarre letture specifiche ed eseguire operazioni a livello di bit. – ThinkJet