Pourquoi le SQL ci-dessous génère-t-il une erreur ORA-01810? J'ai recherché l'erreur et j'utilise différents formats de date pour chaque insertion de date
INSERT INTO bag_grte_clm
(
schd_dprt_ldt,
arr_trpn_stn_cd,
bkg_crtn_gdt,
sbmt_bag_grte_clm_dt,
bag_grte_clm_stt_cd,
lst_updt_gts,
bag_grte_clm_gts,
dprt_trpn_stn_cd
)
VALUES (
TO_DATE('2015/12/06', 'yyyy/mm/dd'),
'YUL',
TO_DATE('2015-11-15', 'yyyy-mm-dd'),
TO_DATE('120615', 'MMDDYY'),
'DENIAL',
(current_timestamp),
TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mm:ss'),
'ATL'
)
TO_TIMESTAMP ('20151206 00:00:00', 'aaaammjjh hh: mm: ss')
C'est faux de deux manières:
1. Code de format incorrect
Vous avez répété le masque de formatage MM
deux fois. MM
est mois et MI
est minutes.
SQL> SELECT TO_TIMESTAMP ('20151206 00:00:00', 'aaaammjj hh: mm: ss') FROM dual; SELECT TO_TIMESTAMP ('20151206 00:00:00', 'yyyymnjjd hh: mm: ss) FROM dual * ERREUR à la ligne 1: ORA-01810: le code de formatage apparaît deux fois
2. Portion de temps incorrecte
00:00:00
est faux car il jetterait ORA-01849 puisque l'heure ne peut être nulle, elle doit être comprise entre 1 et 12 .
SQL> SELECT TO_TIMESTAMP ('20151206 00:00:00', 'aaaammjj hh: mi: ss') FROM dual; SELECT TO_TIMESTAMP ('20151206 00:00:00', 'aaaammjjd hh: mi: ss) FROM dual * ERREUR à la ligne 1: ORA-01849: heure doit être comprise entre 1 et 12
La méthode correcte consiste à utiliser le format 24 heures ou à laisser la partie heure qui, par défaut, serait 12 AM
.
Par exemple,
format 24 heures:
SQL> SELECT TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh24:mi:ss') my_tmstamp FROM dual;
MY_TMSTAMP
---------------------------------------------------------------------------
06-DEC-15 12.00.00.000000000 AM
pas de tranche de temps:
SQL> SELECT TO_TIMESTAMP('20151206', 'yyyymmdd') my_tmstamp FROM dual;
MY_TMSTAMP
-----------------------------------------------------------------------
06-DEC-15 12.00.00.000000000 AM
Vous avez utilisé le code de format mm
deux fois dans TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mm:ss')
MM
est pour mois MI
est pour minute
Vous vouliez probablement utiliser YYYYMMDD HH:MI:SS
.
Veuillez consulter la liste des modèles de format de date pour plus d'informations.