Le troisième paramètre de la fonction REGEXP_SUBSTR indique la position dans la chaîne cible (de_desc
dans votre exemple) où vous voulez commencer la recherche. En supposant qu'une correspondance est trouvée dans la partie donnée de la chaîne, cela n'affecte pas ce qui est renvoyé.
Dans Oracle 11g, il y a un sixième paramètre à la fonction, que je pense être ce que vous essayez d'utiliser, qui indique le groupe de capture que vous voulez renvoyer. Un exemple d'utilisation appropriée serait :
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;
Où le dernier paramètre 1
indiquez le numéro du groupe de capture que vous souhaitez renvoyer. Voici un lien vers la documentation qui décrit le paramètre.
10g ne semble pas avoir cette option, mais dans votre cas, vous pouvez obtenir le même résultat avec :
select substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual
);
puisque vous savez qu'une correspondance aura exactement un caractère en excès au début et à la fin. (Vous pouvez également utiliser RTRIM et LTRIM pour supprimer les crochets aux deux extrémités du résultat.)