Trzeci parametr funkcji REGEXP_SUBSTR wskazuje pozycję w ciągu docelowym (de_desc
w twoim przykładzie), gdzie chcesz rozpocząć wyszukiwanie. Zakładając, że dopasowanie znajduje się w podanej części ciągu, nie ma to wpływu na to, co jest zwracane.
W Oracle 11g istnieje szósty parametr funkcji, który moim zdaniem jest tym, czego próbujesz użyć, a który wskazuje grupę przechwytywania, którą chcesz zwrócić. Przykładem prawidłowego użycia może być:
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;
Gdzie ostatni parametr 1
podaj numer grupy przechwytywania, którą chcesz zwrócić. Oto link do dokumentacji opisującej parametr.
10g nie wydaje się mieć tej opcji, ale w twoim przypadku możesz osiągnąć ten sam wynik za pomocą:
select substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual
);
ponieważ wiesz, że mecz będzie miał dokładnie jeden nadmiarowy znak na początku i na końcu. (Alternatywnie możesz użyć RTRIM i LTRIM, aby usunąć nawiasy z obu końców wyniku).