Si utiliza versiones relativamente recientes de Oracle, debe ver configurar NLS_SORT/NLS_COMP, en lugar de usar la función LOWER().
Si no desea afectar globalmente la instancia, puede usar la función NLSSORT() para establecer NLS_SORT para el alcance de una consulta específica.
SQL> create table case_insensitive(a varchar2(10));
Table created.
SQL> insert into case_insensitive values('D');
1 row created.
SQL>
SQL>
SQL> c/'D/'c
1* insert into case_insensitive values('c')
SQL>/
1 row created.
SQL> c/'c/'B
1* insert into case_insensitive values('B')
SQL>/
1 row created.
SQL> c/'B/'a
1* insert into case_insensitive values('a')
SQL>/
1 row created.
SQL> commit;
Commit complete.
SQL> select * from case_insensitive;
A
----------
D
c
B
a
SQL> select * from case_insensitive order by a;
A
----------
B
D
a
c
SQL> select * from case_insensitive order by nlssort(a,'NLS_SORT=BINARY_CI');
A
----------
a
B
c
D
Un buen ejemplo de esto se puede encontrar here.
Una cosa a añadir sería que esto significaría que si no hay un índice funcional en 'inferior (nombre)' un escaneo completo de tabla se haría con esta consulta. – beny23
Esta consulta siempre requerirá un escaneo de tabla completo, con o sin un ORDER BY. Por lo general, el problema que describes es más importante con la cláusula WHERE. – DCookie
@DCookie: ¿quieres apostar? ;) p.ej. intente un índice funcional en 'lower (name)' agregado con todas las columnas de la tabla = análisis de índice completo, más no sort :) - solo diciendo ' –