Detta beror på att Oracle endast stöder standarden POSIX reguljära uttryck, snarare än Perl-syntaxen som du använder i ditt första exempel.
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
Edit:Som Alex Poole påpekar att Oracle faktiskt stöder Perl regex-syntax sedan Oracle 10gR2. Att prova ditt exempel på min lokala 11gR2-installation tyder på att din syntax är fel, följande fungerar bra:
SELECT 1 FROM dual WHERE regexp_like('040', '^\d{3}$');