'04/04/2012 13:35 PM'
není datum – je to řetězec.
Oracle provede implicitní TO_DATE( string_value, format_mask )
na nedatové literály při jejich vkládání do DATE
pomocí hodnoty NLS_DATE_FORMAT
parametr relace jako masku formátu (poznámka:toto je parametr relace a patří klientovi; nejedná se o globální nastavení ). Pokud se nedatový literál shoduje s tímto formátem, bude fungovat (a pokud ne, pak nebude) – pokud však NLS_DATE_FORMAT
pokud se někdy změní, okamžitě se rozbije (cokoli je velmi obtížné ladit, protože kód, který fungoval, se to nezmění, ale nikdo kód nezmění).
Můžete zjistit svůj aktuální NLS_DATE_FORMAT
s dotazem:
SELECT VALUE
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
Je lepší explicitně použít TO_DATE()
se správnou maskou formátu nebo použít datový literál ANSI/ISO (tj. DATE '2012-04-04'
nebo TIMESTAMP '2012-04-04 13:35'
).
Můžete:
INSERT INTO STORE ( id, opening_time )
VALUES( 1, TO_DATE( '04/04/2012 13:35', 'DD/MM/YYYY HH24:MI' );
(nepotřebujete AM/PM
protože hodinová složka je již na 24hodinovém formátu)
nebo
INSERT INTO STORE ( id, opening_time )
VALUES( 1, TIMESTAMP '2012-04-04 13:35:00' );
(pomocí literálu časového razítka ANSI/ISO, který Oracle implicitně převede na datum)