Re: REGEXP_SUBSTR() is always NULL

From: Álvaro G. Vicario <alvaro.NOSPAMTHANX_at_demogracia.com>
Date: Fri, 26 Jun 2009 09:23:17 +0200
Message-ID: <h21t5k$o90$1_at_news.eternal-september.org>



Maxim Demenko escribió:
> ddf schrieb:
>> On Jun 25, 6:52 am, "Álvaro G. Vicario"
>> <alvaro.NOSPAMTH..._at_demogracia.com> wrote:
>>> ddf escribió:
>>>
>>>> On Jun 25, 6:29 am, "Álvaro G. Vicario"
>>>> <alvaro.NOSPAMTH..._at_demogracia.com> wrote:
>>>>> In an Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 
>>>>> server,
>>>>> REGEXP_SUBSTR() always returns NULL. E.g.:
>>>>> SELECT REGEXP_SUBSTR('1234,5678', '\d+', 1, 1)
>>>>> FROM DUAL
>>>>> In my local 10g XE, however, it returns 1234 as expected.
>>>>> Is it me or is it the server?
>>>> It may be the server if you are, indeed, comparing XE (10.2.0.1) to a
>>>> 10.1.0.2 release.  You're certain you've posted the version for the
>>>> Enterprise Edition correctly?
>>> Absolutely: SELECT BANNER FROM v$version + clipboard.
>>>
>>> If it was a legacy edition that did not support REGEXP_SUBSTR() I'd
>>> expect an error message.
>>>
>>> Is it possible to cancel, disabled or override REGEXP_SUBSTR?
>>>
>>> -- 
>>> --http://alvaro.es- Álvaro G. Vicario - Burgos, Spain
>>> -- Mi sitio sobre programación web:http://borrame.com
>>> -- Mi web de humor satinado:http://www.demogracia.com
>>> -- 
>>
>> Things have changed between 10.1 and 10.2:
>>
>> 10;1 regular expression support --
>> http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/ap_posix001.htm#i690819 
>>
>>
>> 10.2 regular expression support --
>> http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/ap_posix001.htm#i690819 
>>
>>
>> These differences may result in the differences you're seeing.
>>
>>
>> David Fitzjarrell

>
> As David already suggested, perl influenced extensions came in 10.2, the
> list is at
> http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/ap_posix003.htm
>
>
> On 10.1 one should use instead the posix syntax
> REGEXP_SUBSTR('1234,5678', '[[:digit:]]+', 1, 1) or
> REGEXP_SUBSTR('1234,5678', '[0-9]+', 1, 1) or

Oh my... That was difficult to spot! I stared at both documents trying to figure out what had changed, with no luck xD

Of course, that was it: \d was looking for a literal '\d'.

Something I miss in Oracle reference is that it doesn't explain when a function became available or suffered changes; at least, not in the function definition. Oh well, thank you everybody. [0-9] is doing the job just as fine as \d.

-- 
-- http://alvaro.es - Álvaro G. Vicario - Burgos, Spain
-- Mi sitio sobre programación web: http://borrame.com
-- Mi web de humor satinado: http://www.demogracia.com
--
Received on Fri Jun 26 2009 - 02:23:17 CDT

Original text of this message