Spróbuj pobrać parametry nls z różnych przypadków (programy ide lub java), muszą być różne
select * from NLS_SESSION_PARAMETERS
Następnie w procedurze sklepu ustaw zmienne tak, aby były równe od najszybszego przypadku.
execute immediate 'alter session set NLS_SORT=''SPANISH''';
Po SP masz wszystkie parametry nls. Będzie działać szybko.
Niedawno znalazłem podobny przypadek w sesji Alter spowalnia zapytanie przez Hibernate. ale w ich przypadku zmieniają parametry, a następnie stają się powolne.
Zbadałem i stwierdziłem, że parametry NLS_COMP y NLS_SORT mogą wpływać na sposób, w jaki oracle korzysta z planu wykonania dla ciągu znaków (kiedy porównuje lub zamawia)
Gdy NLS_COMP jest zdefiniowany jako LINGUISTIC, użyje języka zdefiniowanego w NLS_SORT.
na przykład, jeśli NLS_COMP =LINGUISTIC i NLS_SORT=BINARI_AI twoje zapytanie to
select * from table where string_column like 'HI%'
wewnętrznie to wystarczy
select * from table where
NLSSORT(string_column,'BINARI_AI') >= HEXTORAW('324242432')
NLSSORT(string_column,'BINARI_AI') >= HEXTORAW('675757576')
więc jeśli nie masz indeksu dla NLSSORT (kolumna,'BINARI_AI'), będzie to bardzo wolne.
wiedząc, że NLS_SORT=BINARY_AI sprawi, że twoje zamówienia i porównania nie będą uwzględniały akcentu i wielkości liter.