|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() |
Bonjour,
voila mon probleme: je veux charger une valeur espace (vide) dans une colonne not null Sql loader considère que c'est un champs null, et la colonne consernée elle peut pas etre null quelqu'un peut m'aider svp |
|
|
00
|
|
|
#2 |
|
Membre actif
![]() Inscription : novembre 2004 Messages : 311 ![]() |
Bonjour,
Peut on connaitre votre version d'Oracle ainsi que le contenu de votre fichier de controle ? |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() |
version Oracle 9.2.0
mon fichier de control est comme suit: LOAD DATA Append INTO TABLE COUNTRY FIELDS TERMINATED BY ";" OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS ( COUNTRY_ID , ISO , NAME , COUNTRY_CODE , COUNTRY_DEF , ENTRYDATE DATE "DD/MM/YYYY HH24:MI:SS" ...... ) Merci |
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() |
J'ajoute juste ke je passe le fichier data en ligne de commande, voici un exemple des ligne de ce fichier :
12;GUF;FRENCH GUIANA;254; ;05/02/1998 14:54:05;0;254;254 ................ mon problème c'est que je veux charger la valeur du 5eme champs de cette ligne sur la colonne : COUNTRY_DEF cette colonne ne peut être null le message d'erreur est le suivant: ORA-01400: cannot insert NULL into ("SYSADM"."COUNTRY"."COUNTRY_DEF") merci |
|
|
00
|
|
|
#5 | |
|
Membre actif
![]() Inscription : novembre 2004 Messages : 311 ![]() |
Voila ce que dit la doc :
Citation:
|
|
|
|
00
|
|
|
#6 | |
|
Membre actif
![]() Inscription : novembre 2004 Messages : 311 ![]() |
Merci pour l'exemple de ligne à insérer !!!
Dans ce cas, ca ne marchera pas car votre colonne n'est pas délimitée par de simple côtes dans le fichier de données et ne représente aucune valeur particulière !!! Il vous faut utiliser le mot clé CONSTANT : Citation:
|
|
|
|
00
|
|
|
#7 | ||
|
Membre actif
![]() Inscription : novembre 2004 Messages : 311 ![]() |
Code :
|
||
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() |
PRESERVE BLANKS au niveau de fichier de controle ça marche pas, problème de syntaxe
pour le CONSTANT, je crois pas que ça va marcher, parce que ma ligne peut contenir d'autre valeur comme ci-dessou: 81;DMA;DOMINICA;212;X;20/10/2003 17:38:47;0;212;............. je vais essayé la troisième proposition, celle avec TERMINITED BY !! |
|
|
00
|
|
|
#9 |
|
Membre actif
![]() Inscription : novembre 2004 Messages : 311 ![]() |
AH !!!!
Ca serait bien de ne pas dévoiler vos différentes cas au fur et à mesure pcq là on va pas s'en sortir !!! Donc, je pense qu'il y a un problème dans l'énoncé !!! Votre fichier en entrée peut contenir ou NON une valeur pour cette colonne et votre colonne est définie en NOT NULL dans votre table !!! Donc, essayer d'utiliser la fonction DECODE ou NVL !!!!!
|
|
|
00
|
|
|
#10 |
|
Membre actif
![]() Inscription : novembre 2004 Messages : 311 ![]() |
Ou alors la fonction REPLACE
|
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() |
j'ai essayé avec : , COUNTRY_DEF "NVL(:COUNTRY_DEF,' ')" est ça marche Merci bcp pour ton Aide |
|
|
00
|
|
|
#12 |
|
Membre du Club
![]() Inscription : mars 2005 Messages : 277 ![]() |
à part cette solution
est il possible , de parameter oracle pour pouvoir inserer un champ à '' dans un champs qui à la contrainte not null ? |
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
si c'est un varchar, '' et null c'est la même chose (tiens j'ai l'impression d'avoir déja dit ça y'a pas longtemps....
|
|
|
00
|
|
|
#14 |
|
Membre du Club
![]() Inscription : mars 2005 Messages : 277 ![]() |
donc c'est impossible d'y remedier
|
|
|
00
|
|
|
#15 |
|
Membre du Club
![]() Inscription : mars 2005 Messages : 277 ![]() |
Personne ne voit
|
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
si tu veux mettre un champ null dans un champ avec une contrainte not-null, le plus simple est d'enlever la contrainte!... c'est un peu comme si essayais de mettre des valeurs en double dans un champ avec une contrainte unique...
|
|
|
00
|
|
|
#17 |
|
Membre du Club
![]() Inscription : mars 2005 Messages : 277 ![]() |
en gros c'est eviter le probleme sans le resourdre
parceque NULL c'est different de '' mais apparament il n'y a qu'oracle qui ne gere pas ça. c'est de la daube |
|
|
00
|
|
|
#18 |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Ben, ça a toujours été implémenté comme ça. Après, c'est un débat philosophique. Une chaine variable peut être considérée comme une suite d'informations de type "caractère". Lorsque cette chaine est de longueur nulle, c'est qu'il n'y a pas d'information ce qui est exactement la définition de NULL.
C'est vrai que cette équivalence peut être génante, mais c'est parfois l'inverse qui l'est. Sur sybase par exemple, on peu inserer effectivement des chaines vides sur des champs qui ont la contrainte not null. Et bien c'est souvent trés pénible, car on ne peu pas faire facilement de vérification qu'une chaine a bien quelque chose à l'intérieur avant de l'inserer. Il faut à chaque fois traiter les null ET les chaines vides, ce qui dans un fichier de load veux souvent dire la même chose... |
|
|
00
|
|
|
#19 |
|
Invité de passage
![]() Inscription : décembre 2007 Messages : 6 ![]() |
si t'as colonne est vide il faut interpréter ce résultat en base :
- si c'est un char : en base on doit avoir ' ' (donc un espace) - si c'est un integer : en base on doit avoir un '0' donc ca donne ca (exemple avec deux champs): noter que le champ à charger devient un champ à calculer. TRUNCATE INTO TABLE -- FIELDS TERMINATED BY ';' TRAILING NULLCOLS ( --field from file a BOUNDFILLER, b BOUNDFILLER, --field calculated COUNTRY CHAR "nvl (:a,' ')", BO_ID_CUST INTEGER EXTERNAL "nvl(:b,0)" ) |
|
|
00
|
|
|
#20 | |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
Citation:
Nous attendons alors Michel |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com