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 [-,:]?
.