Pagina relativa a Oracle
ORACLE E RICERCHE CASE INSENSITIVE 24/01/08
Per chi ha dovuto affrontare il problema delle ricerche case insensitive su database Oracle, sa che questo problema non è del tutto banale. Andiamo per gradi.
Per rendere una ricerca case insensitive è necessario innanzitutto modificare i paramentri di sessione NLS_COMP e NLS_SORT:
Oracle 9iR2
SQL>ALTER SESSION SET NLS_COMP=ANSI;
SQL>ALTER SESSION SET NLS_SORT=GENERIC_BASELETTER;
Oracle 10gR1
SQL> ALTER SESSION SET NLS_COMP=ANSI;
SQL> ALTER SESSION SET NLS_SORT=BINARY_CI;
Oracle 10gR2
SQL> ALTER SESSION SET NLS_COMP=LINGUISTIC;
SQL> ALTER SESSION SET NLS_SORT=BINARY_CI;
I problemi non sono però finiti qui.
Infatti se per le ricerche con l’uguaglianza (es.: select citta from tabella where citta =’milano’) tutto procede per il verso giusto, le ricerche con l’operatore “LIKE” non sono case insensitive se non dalla versione 10gR2.
Ne deriva che nelle versioni precedenti alla 10gR2 la query
SQL> select citta from tabella where citta LIKE ‘milano%’
non ci fornisce lo stesso risultato della query di uguaglianza…e questo non è il massimo.
Inoltre nella versione 10gR2 le ricerche con LIKE non supportano gli indici se NLS_COMP è settato su LINGUISTIC, il che probabilmente potrebbe portare a un peggioramento delle prestazioni