El tercer parámetro de la función REGEXP_SUBSTR indica la posición en la cadena de destino (de_desc
en su ejemplo) donde desea iniciar la búsqueda. Suponiendo que se encuentra una coincidencia en la porción dada de la cadena, no afecta lo que se devuelve.
En Oracle 11g, hay un sexto parámetro para la función, que creo que es lo que está intentando usar, que indica el grupo de captura que desea devolver. Un ejemplo de uso adecuado sería:
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;
Cuando el último parámetro 1
indican el número del grupo de captura que desea devolver.
10g no parecen tener esta opción, pero en su caso se puede lograr el mismo resultado con:
select substr(match, 2, length(match)-2) from (
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual
);
ya que saber que un partido tendrá exactamente un exceso de caracteres al comienzo y al final. (Alternativamente, puede usar RTRIM y LTRIM para eliminar corchetes de ambos extremos del resultado.)
Lo sorprendente es que el sexto parámetro no se menciona en la documentación REGEXP_SUBSTR oficial de Oracle. Gracias por señalar que existe. –