Oracle Unicode

Da Emigar.
Jump to navigation Jump to search

modalità indipendente dal codeset di sessione

Per funzionare il terminale deve avere lo stesso codeset della connessione oracle (variabile NLS_LANG). i terminali linux nativi normalmente hanno codeset UTF8. verifica se il terminale è impostato bene:

select 'a minuscola accentata e simbolo euro',unistr('\00E0\20AC') from dual;


SQL> select unistr('Modalit\00E0 Euro(\20AC)') from dual;
UNISTR('MODALIT\00E0EURO(\20AC)')
----------------------------------------------------------------
Modalità Euro(€)
SQL> 

caratteri estesi

SQL> select UNISTR('\20AC') from dual;
UNISTR('\20AC')
--------------------------------------------------------------------------------
€


SQL> select asciistr('€') from dual;
ASCIISTR('€')
--------------------------------------------------------------------------------
\20AC


Questi i principali caratteri accentati:

SQL> select asciistr('èÈéÉàÀìÌòÒùÙ') as caratteri_accentati from dual;
CARATTERI_ACCENTATI
--------------------------------------------------------------------------------
\00E8\00C8\00E9\00C9\00E0\00C0\00EC\00CC\00F2\00D2\00F9\00D9

correggere caratteri estesi

Spesso, per non corrispondenza del codeset del file di input con il codeset della sessione oracle, vengono inseriti caratteri estesi non corrispondenti al file di input. Per trovare le righe con caratteri estesi:

select COLONNA1 || ' ###### ' || asciistr(COLONNA1) from TABELLA1 where asciistr(COLONNA1) like '%\%';

Per modificare i caratteri estesi:

update TABELLA1 set COLONNA1=unistr(replace(asciistr(COLONNA1),'\00E0\00A0','\00E0')) where asciistr(COLONNA1) like '%\00E0\00A0%';