Mário, óbvio : se vc tem uma expressão numérica, OBVIAMENTE o caracter '-' vai ser entendi como um sinal de substração, né não ??? E óbvio#2, tá Documentado que a função REPLACE trabalha com strings... Então para atender aos dois pontos simplesmente TRANSFORME esse número em STRING, fechando a expressão com aspas, assim :
SELECT replace('4506-3', '-', '') FROM DUAL; []s Chiappa