Regexp använder inte \ för att skydda - i ett parentesuttryck . Du behöver bara ange - som det första tecknet, precis efter den inledande parentesen:
IF REGEXP_LIKE('--,,::', '[\-,:]*')
...
=> ORA-12728: invalid range in regular expression
Om du är nyfiken, när du stöter på [\-,:] Oracle förstår:"alla tecken i intervallet från \ till , eller tecknet : " . Anledningen till att detta skapar ett undantag är \ verkar vara efter , enligt deras ASCII-värde. Och Oracle accepterar inte räckvidd har ett startvärde efter det sista.
Å andra sidan:
IF REGEXP_LIKE('--,,::', '[-,:]*')
Fungerar som förväntat.
Som en sidoanteckning,
[-,:]{0,1} betyder "noll eller en förekomst av - eller , eller : " kan skrivas [-,:]? .