sql >> Base de Datos >  >> RDS >> Oracle

ORA-12728:rango no válido en expresión regular

Regexp no usa \ para proteger - en una expresión entre paréntesis . Solo tienes que poner - como primer carácter, justo después del paréntesis de apertura:

IF REGEXP_LIKE('--,,::', '[\-,:]*')
...

=> ORA-12728: invalid range in regular expression

Si tienes curiosidad, cuando encuentres [\-,:] Oracle entiende:"cualquier carácter en el rango de \ a , o el caracter : " . La razón por la que esto genera una excepción es \ parece ser después , según su valor ASCII. Y Oracle no acepta rango teniendo un valor inicial después del final.

Por otro lado:

 IF REGEXP_LIKE('--,,::', '[-,:]*')

Funciona como se esperaba.

Como nota al margen, [-,:]{0,1} que significa "cero o una ocurrencia de - o , o : " podría escribirse [-,:]? .