Je to proto, že Oracle podporuje pouze standard regulárních výrazů POSIX, nikoli syntaxi Perlu, kterou používáte ve svém prvním příkladu.
Oracle Docs:http://docs.oracle. com/cd/B19306_01/appdev.102/b14251/adfns_regexp.htm#CHDJGBGG POSIX Regex Standard:http://pubs.opengroup.org/onlinepubs/007908799 /xbd/re.html
Upravit:Jako Alex Poole poukazuje na to, že Oracle skutečně podporuje syntaxi regexu Perl od verze Oracle 10gR2. Vyzkoušení vašeho příkladu na místní instalaci 11gR2 naznačuje, že vaše syntaxe je nesprávná, následující funguje dobře:
SELECT 1 FROM dual WHERE regexp_like('040', '^\d{3}$');