'04/04/2012 13:35 PM'
não é uma data - é uma string. O Oracle fará um
TO_DATE( string_value, format_mask )
implícito em literais sem data ao inseri-los em um DATE
coluna usando o valor do NLS_DATE_FORMAT
parâmetro de sessão como a máscara de formato (nota:este é um parâmetro de sessão e pertence ao cliente; não é uma configuração global ). Se o literal sem data corresponder a esse formato, ele funcionará (e se não funcionar, não funcionará) - no entanto, se o NLS_DATE_FORMAT
for alterado, ele será interrompido imediatamente (qualquer um será uma grande dor para depurar, pois o código que estava funcionando não, mas ninguém terá alterado o código). Você pode descobrir seu
NLS_DATE_FORMAT
atual com a consulta:SELECT VALUE
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
É melhor usar explicitamente
TO_DATE()
com a máscara de formato correta ou para usar um literal de data ANSI/ISO (ou seja, DATE '2012-04-04'
ou TIMESTAMP '2012-04-04 13:35'
). Você pode fazer:
INSERT INTO STORE ( id, opening_time )
VALUES( 1, TO_DATE( '04/04/2012 13:35', 'DD/MM/YYYY HH24:MI' );
(você não precisa do
AM/PM
pois o componente de hora já está em um relógio de 24 horas) ou
INSERT INTO STORE ( id, opening_time )
VALUES( 1, TIMESTAMP '2012-04-04 13:35:00' );
(usando o literal de carimbo de data/hora ANSI/ISO que o Oracle converterá implicitamente em uma data)