Prøv at hente nls-parametre fra dine forskellige cases (ide'er eller java-programmer), de skal være forskellige
select * from NLS_SESSION_PARAMETERS
Indstil derefter variablerne inde i din butiksprocedure, så de bliver lig fra den hurtigste sag.
execute immediate 'alter session set NLS_SORT=''SPANISH''';
Når du SP har alle nls parametre. Det vil køre hurtigt.
Jeg har for nylig fundet et lignende tilfælde i Alter-sessionen sænker forespørgslen gennem Hibernate. men i deres tilfælde ændrede de parametrene og blev så langsomme.
Jeg undersøgte og fandt ud af, at parametrene NLS_COMP og NLS_SORT kan påvirke, hvordan oracle gør brug af eksekveringsplan for streng (når den sammenligner eller bestiller)
Når NLS_COMP er defineret som LINGUISTIC, vil det bruge sproget defineret i NLS_SORT.
for eksempel, hvis NLS_COMP =LINGUISTIC og NLS_SORT=BINARI_AI din forespørgsel
select * from table where string_column like 'HI%'
internt vil det gøre
select * from table where
NLSSORT(string_column,'BINARI_AI') >= HEXTORAW('324242432')
NLSSORT(string_column,'BINARI_AI') >= HEXTORAW('675757576')
så hvis du ikke har et indeks for NLSSORT(kolonne,'BINARI_AI'), vil det være meget langsomt.
vel vidende, at NLS_SORT=BINARY_AI vil gøre din bestilling og sammenligninger ufølsomme for accent og store og små bogstaver.