-
Sql*Loader et date
Bonjour,
J'utilise Sql*Loader pour charger une table, et j'ai un champ date dans cette table.
J'ai lu par-ci par-là sur le net la façond e faire, mais soit je suis crétin, soit c'est mon Loader. Dans tous les cas, ça marche pas.
Si quelqu'un pouvait me dire ce qui ne fonctionne pas là-dedans...
Merci bien
(note : je sais qu'il y a un champ de plus dans ma table que dans mon fichier, mais ça n'a pas d'importance, et ça ne devrait aps empêcher le loader de fonctionner)
Sans plus attendre, les données :
---
Fichier du Loader
OPTIONS ( SKIP=1)
LOAD DATA
INFILE 'relation_acteur.csv'
INTO TABLE "TMP_ACTRELATION"
(ACTCODE,
ACTCODELIE,
TRECODE,
AREDTDEB "to_date(:AREDTDEB, 'YYYYMMDD')",
AREQP ,
FLAGTRT)
---
Fichier CSV
BG000001;BR012177;?;19800101;1
---
CREATE TABLE TMP_ACTRELATION
(
ACTCODE VARCHAR2(15),
ACTCODELIE VARCHAR2(15),
TRECODE VARCHAR2(7),
AREDTDEB DATE,
AREQP NUMBER(7),
FLAGTRT VARCHAR2(1)
)
---
et le message d'erreur :
Enregistrement 1 : Rejeté - Erreur sur table "TMP_ACTRELATIONB2", colonne AREDTDEB.
ORA-01840: valeur entrée pas assez longue pour le format de la date
EDIT : correction du format de la date en YYYYMMDD
-
A chaud, je dirai que ton format de date n'est pas bon. Je m'explique :
le format reconnu par ORACLE est YY pour les années et non YYYY comme il semble être défini dans ton fichier.
Il faut modifier ton format d'entrée dans le .ctl en ajoutant 2 YY dans ton masque de date.
@+,
NicK.
-
My bad, j'ai corrigé dans ma question.
Dans mon fichier CTL c'est bel et bien YYYYMMDD que j'ai (là, c'était juste un test).
-
Tu peux fournir le fichier de log au complet STP ?
Là, on ne voit pas grand chose.
Au fait, tu as bien défini une ligne d'entête dans ton fichier csv ? Il contient bien plusieurs lignes ?
@+,
NicK. 8-)
-
Voici mon fichier log presque au complet (pusiqu'il y a une cinquante d'erreur avant arrêt du Loader)
Sinon je confirme, l'erreur ne provient pas de la première ligne, j'ai zappé la ligne d'entête en vous envoyant mon csv
Nombre à charger : ALL
Nombre à sauter: 1
Erreurs permises: 50
Tableau de liens : 64 lignes, maximum de 65536 octets
Continuation : aucune spécification
Chemin utilisé: Classique
Table "TMP_ACTRELATIONB2", chargé à partir de chaque enregistrement physique.
Option d'insertion en vigueur pour cette table : INSERT
Nom de colonne Position Long. Séparat. Encadrem. Type de données
------------------------------ ---------- ----- ---- ---- ---------------------
ACTCODE FIRST 1 CHARACTER
ACTCODELIE NEXT 1 CHARACTER
TRECODE NEXT 1 CHARACTER
AREDTDEB NEXT 1 CHARACTER
chaîne SQL pour la colonne : "to_date(:AREDTDEB, 'YYYYMMDD')"
AREQP NEXT 1 CHARACTER
FLAGTRT NEXT 1 CHARACTER
Enregistrement 1 : Rejeté - Erreur sur table "TMP_ACTRELATIONB2", colonne AREDTDEB.
ORA-01840: valeur entrée pas assez longue pour le format de la date
-
Je ne sais pas exactement quelle est l'erreur mais dans ton ctl, je mettrai :
un séparateur (le ; )
un délimiteur de chaine de caractères (le ") si c'est possible.
@+,
NicK, en week-end. 8-)
-
Avec ce fichier CTL là, ça fonctionne correctement.
(comme je n'ai vu aucun problème résolu sur ce sujet, je me suis dit que ça intéresserait d'avoir une version qui marche)
EDIT : J'allais oublier, Merci à l'équipe !
OPTIONS ( SKIP=1)
LOAD DATA
INFILE '\relation_acteur.csv'
BADFILE '\relation_acteur.bad'
DISCARDFILE '\relation_acteur.dsc'
INTO TABLE "TMP_ACTRELATIONB2"
FIELDS TERMINATED BY ';'
TRAILING NULLCOLS
(ACTCODE
,
ACTCODELIE
,
TRECODE
,
AREDTDEB "to_date(:AREDTDEB, 'YYYYMMDD')"
,
AREQP
,
FLAGTRT
)