Това е така, защото Oracle поддържа само стандарта за регулярни изрази POSIX, а не синтаксиса на Perl, който използвате в първия си пример.
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
Редактиране:Като Алекс Пул посочва, че Oracle действително поддържа синтаксиса на регулярен израз на Perl от Oracle 10gR2. Изпробването на вашия пример на моята локална инсталация на 11gR2 предполага, че синтаксисът ви е грешен, следното работи добре:
SELECT 1 FROM dual WHERE regexp_like('040', '^\d{3}$');