{Oracle} SQL Loader erreur date null
afura
-
afura -
afura -
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...
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...
Configuration: Windows XP Oracle 10g
6 réponses
-
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 ??
-
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...
-
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 :) -
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 ?
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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é.
-
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