{Oracle} SQL Loader erreur date null

Fermé
afura - 9 nov. 2009 à 12:32
 afura - 16 nov. 2009 à 16:05
Bonjour tous,

alors voilà j'essaie de charger un fichier dont l'une des colonnes est une date. Parfois la date n'est pas renseignée. Donc parfois à la place d'une valeur date j'ai NUL.
Mes fichiers ci dessous :

mon CTL:
LOAD DATA INFILE xxx.UNPACK APPEND INTO TABLE xxx TRAILING NULLCOLS (
xxx POSITION(1:9) INTEGER EXTERNAL,
DATE_APPRO POSITION(10:19) "DECODE(:DATE_APPRO,'','00', null, to_date(:DATE_APPRO,'YYYY-MM-DD'))"
)

mon fichier de données(1ligne):
édité sous Notepad++
1234567892099-12-01
123789456NULNULNULNULNULNULNULNULNULNUL

Ma log:
ORA-01847: day of month must be between 1 and last day of month

je vous avoue que j'ai pas mal cherché mais je trouve pas comment m'en sortir...

6 réponses

jee pee Messages postés 39634 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235
9 nov. 2009 à 21:23
Salut,

d'abord je ne comprends pas le decode :
"DECODE(:DATE_APPRO,'','00', null, to_date(:DATE_APPRO,'YYYY-MM-DD'))"

règle :

decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n)
ou
decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)

donc si je prends ton decode

quand date_appro egal '' , alors '00'
et quand date_appro null alors to_date

ou alors dans le sql*loader la syntaxe est autre

Et ton fichier texte il contient NUL , soit 3 octets ou cela affiche NUL qui correspondrait à '00' hexa ??



0
salut jee pee,
effectivement c'est une coquille la syntaxe est

"DECODE(:DATE_APPRO,'00', null, to_date(:DATE_APPRO,'YYYY-MM-DD'))"

et mon fichier de data contient des 0 en hexa à la place de ma date. Soit effectivement ce qui s'affiche en NUL dans Notepad++
0
jee pee Messages postés 39634 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235
10 nov. 2009 à 08:51
Il faudrait que dans le décode tu donnes la valeur hexa des 10 positions, syntaxe sans garantie : X'00'

donc decode(...,X'00000000000000000000',null,to_date...
0
salut jeepee,
j'ai trouvé la solution il faut faire ça
"DECODE(HEXTORAW(:DATE_APPRO),'', null, to_date(:DATE_APPRO,'YYYY-MM-DD'))"

je suis trop bon :)
0
mais maintenant si j'ai vraiment une date alors HEXTORAW plante. comment tu fais pour détecter que tu as de l'hexa ou bien que c'est NUL soit x00 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jee pee Messages postés 39634 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235
10 nov. 2009 à 12:52
As tu essayé comme je t'ai indiqué, donc en cherchant une chaine de 10 octets contenant zéro hexa ?

NULL est une notion propre à la base de donnée. Puisque une valeur zéro (binaire ou héxa c'est toujours zéro) c'est une valeur, ce n'est pas NULL qui signifie pas de valeur, non renseigné.

0
alors j'ai essayé avec le CTL
DATE_APPRO POSITION(814:823) DATE "DECODE(:DATE_APPRO,X'00000000000000000000',null,TO_DATE(:DATE_APPRO,'YYYY-MM-DD'))"
et j'ai eu une erreur sur date format :
ORA-01821: date format not recognized
0