Prova a ottenere i parametri nls dai tuoi casi diversi (programmi ide o java) devono essere diversi
select * from NLS_SESSION_PARAMETERS
Quindi all'interno della procedura del tuo negozio imposta le variabili per renderle uguali dal caso più veloce.
execute immediate 'alter session set NLS_SORT=''SPANISH''';
Una volta che SP hai tutti i parametri nls. Funzionerà velocemente.
Di recente ho riscontrato che un caso simile in Alter session rallenta la query tramite Hibernate . ma nel loro caso cambiano i parametri e poi diventano lenti.
Ho studiato e scoperto che i parametri NLS_COMP e NLS_SORT possono influenzare il modo in cui Oracle utilizza il piano di esecuzione per stringa (quando si confronta o ordina)
Quando NLS_COMP è definito come LINGUISTICO, utilizzerà la lingua definita in NLS_SORT.
ad esempio, se NLS_COMP =LINGUISTIC e NLS_SORT=BINARI_AI la tua query è
select * from table where string_column like 'HI%'
internamente lo farà
select * from table where
NLSSORT(string_column,'BINARI_AI') >= HEXTORAW('324242432')
NLSSORT(string_column,'BINARI_AI') >= HEXTORAW('675757576')
quindi se non hai un indice per NLSSORT(colonna,'BINARI_AI') sarà molto lento.
sapendo che NLS_SORT=BINARY_AI renderà insensibili all'accento e alle maiuscole i tuoi ordini e confronti.