2010-08-20 3 views
2

У меня проблема с сопоставлением регулярного выражения в Oracle PL/SQL. Чтобы быть более конкретным, проблема заключается в том, что регулярное выражение не хочет соответствовать нулевому вхождению. Например, у меня есть что-то вроде:PL/SQL Регулярное выражение Oracle не работает для возникновения нуля

select * from dual where regexp_like('', '[[:alpha:]]*'); 

и это не работает. Но если я коснусь места в этом отчете:

select * from dual where regexp_like(' ', '[[:alpha:]]*'); 

это работает.

Я хочу, чтобы первый пример работал, так что человеку не нужно класть «пространство» для его работы. Любая помощь приветствуется, и спасибо за ваше время.

T

ответ

0

ли Oracle по-прежнему относиться пустые строки как значения NULL? И если да, то regexp_like с NULL входной строки источника возвращает UNKNOWN? Оба они были бы полу-разумными, и причина, по которой ваш тест не работает так, как вы ожидали.

2

Для better or worse, пустые строки в Oracle, рассматриваются как NULL:

SQL> select * from dual where '' like '%'; 

DUMMY 
----- 

принять во внимание при запросе с Oracle:

SQL> SELECT * 
    2 FROM dual 
    3 WHERE regexp_like('', '[[:alpha:]]*') 
    4  OR '' IS NULL; 

DUMMY 
----- 
X