Il terzo parametro della funzione REGEXP_SUBSTR indica la posizione nella stringa di destinazione (de_desc
nel tuo esempio) dove vuoi iniziare la ricerca. Supponendo che venga trovata una corrispondenza nella parte data della stringa, ciò non influisce su ciò che viene restituito.
In Oracle 11g, c'è un sesto parametro per la funzione, che penso sia quello che stai cercando di usare, che indica il gruppo di acquisizione che vuoi restituire. Un esempio di uso corretto potrebbe essere:
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;
Dove l'ultimo parametro 1
indicare il numero del gruppo di acquisizione che si desidera restituire. Ecco un link alla documentazione che descrive il parametro.
10 g non sembrano avere questa opzione, ma nel tuo caso puoi ottenere lo stesso risultato con:
select substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual
);
poiché sai che una partita avrà esattamente un carattere in eccesso all'inizio e alla fine. (In alternativa, puoi usare RTRIM e LTRIM per rimuovere le parentesi da entrambe le estremità del risultato.)