Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

ORA-12728:intervalo inválido na expressão regular


Regexp não usa \ para proteger - em uma expressão de colchetes . Você só precisa colocar - como o primeiro caractere, logo após o colchete de abertura:
IF REGEXP_LIKE('--,,::', '[\-,:]*')
...

=> ORA-12728: invalid range in regular expression

Se você estiver curioso, ao encontrar [\-,:] Oracle entende:"qualquer caractere no intervalo de \ para , ou o caractere : " . O motivo pelo qual isso gera uma exceção é \ parece estar depois , de acordo com seu valor ASCII. E a Oracle não aceita range tendo um valor inicial após o final.

Por outro lado:
 IF REGEXP_LIKE('--,,::', '[-,:]*')

Funciona como esperado.


Como uma observação lateral, [-,:]{0,1} significando "zero ou uma ocorrência de - ou , ou : " poderia ser escrito [-,:]? .