Quando o oracle converte implicitamente o tipo de data? de quais parâmetros isso depende?
Estou executando o seguinte:
SELECT SYSDATE - '01-01-01' FROM DUAL
e pegou :
SELECT SYSDATE - '01-01-01' FROM DUAL
*
ERROR at line 1:
ORA-01722: invalid number
por que o Oracle não está convertendo varchar '01-01-01' para data?
nls_date_format I have set to 'DD-MM-RR'
Um erro ORA-01722 ("número inválido") ocorre quando é feita uma tentativa de converter uma string de caracteres em um número e a string não pode ser convertida em um número válido.
O parâmetro Nls_date_format ajuda a converter implicitamente o varchar em um tipo de data.
Exemplo:
No exemplo acima, a conversão de tipo implícito ocorre desde que definimos
NLS_DATE_FORMAT
. No seu caso, ele estava tentando extrair o número (ou você poderia dizer explicitamente) de SYSDATE, mas encontrou a string e não a data.Exemplo:
Aqui funciona perfeitamente e retorna a data subtraindo 1 dia do SYSDATE pois conseguiu converter a string para number.
A melhor maneira é converter explicitamente o varchar em um tipo de data. Você pode usar a seguinte consulta para subtrair data de sysdate (supondo que você tenha definido NLS_DATE_FORMAT=DD-MM-RR):
A Oracle recomenda usar a conversão de tipo explícita.