| ORA-01722: invalid number
Cause: The attempted conversion of a character string to a number failed because the character string was not a valid numeric literal. Only numeric fields or character fields containing numeric data may be used in arithmetic functions or expressions. Only numeric fields may be added to or subtracted from dates.
Action: Check the character strings in the function or expression. Check that they contain only numbers, a sign, a decimal point, and the character "E" or "e" and retry the operation.
Sinon, ça se complique un peu, mais comme je n'ai pas d'oracle pour tester, je ne sais pas si l'on peut faire ça plus simplement: LOAD DATA
INFILE 'C:\dmlres.csv'
TRUNCATE
INTO TABLE dmlres
WHEN PRIX<>'NULL'
FIELDS TERMINATED BY ';'
(RESERVATION_ID "db_seq.nextval" ,
EMPLOYEE_ID ,
DATE_CREATION,
TYPE_PAIEMENT,
PRIX CHAR "to_number(:PRIX,'9999999D99','NLS_NUMERIC_CHARACTERS= '',.''')",
ACHETEUR_ID)
INTO TABLE dmlres
WHEN PRIX='NULL'
FIELDS TERMINATED BY ';'
(RESERVATION_ID "db_seq.nextval" ,
EMPLOYEE_ID ,
DATE_CREATION,
TYPE_PAIEMENT,
PRIX,
ACHETEUR_ID) En gros, si le prix n'est pas la chaine 'NULL', on applique la conversion, sinon, on le traite normalement...
Avec un peut de chance, ça passe... :)
Une belette, un lapin !?
C'est pas normal! Répondre à asevere | 11 Hellreaper, le 22 fév 2008 à 15:19:14Dsl pour ne repondre que maintemant j'ai un tp linux a rendre bientot ^^, merci pour ta reponse asevere je vais testé cela se weekend, encore merci. Répondre à Hellreaper | Pas de soucis
Bon TP
Une belette, un lapin !?
C'est pas normal! Répondre à asevere | 13 Hellreaper, le 26 fév 2008 à 00:45:44Bon, j'ai fini se fameut tp linux ^^, donc retournons a nos moutons, J'ai mis ce que tu m'avais dit de mettre dans mon ficher .ctl, mais malheureusement j'ai toujours des erreurs, Il ne ma pas crée un ficher bad cette fois ci parcontre je c pas pourquoi...
pour tant j'ai bien mis :
sqlldr control=c:\dml_t_abo.ctl log=c:\log1.txt bad=c:\bad.txt
Enfin bref d'apres mon ficher log l'erreur viendrais du WHEN:
Fichier de contrôle : c:\dml_t_res.ctl
Fichier de données : C:\dmlres.csv
Fichier BAD : bad.txt
Fichier DISCARD : aucune spécification
(Allouer tous les rebuts)
Nombre à charger : ALL
Nombre à sauter: 0
Erreurs permises: 50
Tableau de liens : 64 lignes, maximum de 256000 octets
Continuation : aucune spécification
Chemin utilisé: Classique
Table DMLRES, chargé quand PRIX != 0X4e554c4c(caractère 'NULL')
Option d'insertion en vigueur pour cette table : TRUNCATE
Nom de colonne Position Long. Séparat. Encadrem. Type de données
------------------------------ ---------- ----- ---- ---- ---------------------
RESERVATION_ID FIRST * ; CHARACTER
chaîne SQL pour la colonne : "seq_t_reservations.nextval"
EMPLOYEE_ID NEXT * ; CHARACTER
DATE_CREATION NEXT * ; CHARACTER
TYPE_PAIEMENT NEXT * ; CHARACTER
PRIX NEXT * ; CHARACTER
chaîne SQL pour la colonne : "to_number(:PRIX,'9999999D99','NLS_NUMERIC_CHARACTERS= '',.''')"
ACHETEUR_ID NEXT * ; CHARACTER
Table DMLRES, chargé quand PRIX = 0X4e554c4c(caractère 'NULL')
Option d'insertion en vigueur pour cette table : TRUNCATE
Nom de colonne Position Long. Séparat. Encadrem. Type de données
------------------------------ ---------- ----- ---- ---- ---------------------
RESERVATION_ID NEXT * ; CHARACTER
chaîne SQL pour la colonne : "seq_t_reservations.nextval"
EMPLOYEE_ID NEXT * ; CHARACTER
DATE_CREATION NEXT * ; CHARACTER
TYPE_PAIEMENT NEXT * ; CHARACTER
PRIX NEXT * ; CHARACTER
ACHETEUR_ID NEXT * ; CHARACTER
Enregistrement 13 : Rejeté - échec de toutes les clauses WHEN.
Enregistrement 18 : Rejeté - échec de toutes les clauses WHEN.
Enregistrement 23 : Rejeté - échec de toutes les clauses WHEN.
Enregistrement 31 : Rejeté - échec de toutes les clauses WHEN.
Table DMLRES :
Chargement réussi de 37 Lignes.
0 Lignes chargement impossible dû à des erreurs de données.
4 Lignes chargement impossible car échec de toutes les clauses WHEN.
0 Lignes chargement impossible car tous les champs étaient non renseignés.
Table DMLRES :
Chargement réussi de 0 Lignes.
0 Lignes chargement impossible dû à des erreurs de données.
41 Lignes chargement impossible car échec de toutes les clauses WHEN.
0 Lignes chargement impossible car tous les champs étaient non renseignés.
Espace affecté au tableau de liens : 198144 octets(64 lignes)
Octets de tampon de lecture : 1048576
Nombre total d'enregistrements logiques ignorés : 0
Nombre total d'enregistrements logiques lus : 41
Nombre total d'enregistrements logiques rejetés : 0
Nombre total d'enregistrements logiques mis au rebut : 4
Le début de l'exécution a été effectué sur Mar. Févr. 26 00:44:32 2008
La fin de l'exécution a été effectuée sur Mar. Févr. 26 00:44:40 2008
Temps écoulé (ELAPSED) : 00:00:09.22
Temps processeur (CPU) : 00:00:00.07 Répondre à Hellreaper | Table DMLRES, chargé quand PRIX = 0X4e554c4c(caractère 'NULL')
Table DMLRES, chargé quand PRIX != 0X4e554c4c(caractère 'NULL')
A tout hasard, essayes avec des doubles quotes autour des NULLl dans les clause WHEN: LOAD DATA
INFILE 'C:\dmlres.csv'
TRUNCATE
INTO TABLE dmlres
WHEN PRIX<>"NULL"
FIELDS TERMINATED BY ';'
(RESERVATION_ID "db_seq.nextval" ,
EMPLOYEE_ID ,
DATE_CREATION,
TYPE_PAIEMENT,
PRIX CHAR "to_number(:PRIX,'9999999D99','NLS_NUMERIC_CHARACTERS= '',.''')",
ACHETEUR_ID)
INTO TABLE dmlres
WHEN PRIX="NULL"
FIELDS TERMINATED BY ';'
(RESERVATION_ID "db_seq.nextval" ,
EMPLOYEE_ID ,
DATE_CREATION,
TYPE_PAIEMENT,
PRIX,
ACHETEUR_ID)
Une belette, un lapin !?
C'est pas normal! Répondre à asevere |
| Non, oublies ça changera rien....
Peux-tu me montrer les lignes 13, 18, 23, 31 de ton fichier de données ?
Une belette, un lapin !?
C'est pas normal! Répondre à asevere |
| Il ne ma pas crée un ficher bad cette fois ci parcontre je c pas pourquoi...
C'est normal, les enregistrements ne sont pas mauvais, mais exclus, si tu veux les récuperer il faut que tu ajoutes:
DISCARDFILE 'nom du fichier' à ton fichier de contrôle
ou l'option discard=c:\fichier au lancement de la commande
Une belette, un lapin !?
C'est pas normal! Répondre à asevere |
| On va tester plus simple :)
Essayes avec le CTL file ci-dessous: LOAD DATA
INFILE 'C:\dmlres.csv'
TRUNCATE
INTO TABLE dmlres
FIELDS TERMINATED BY ';'
(RESERVATION_ID "db_seq.nextval" ,
EMPLOYEE_ID ,
DATE_CREATION,
TYPE_PAIEMENT,
PRIX CHAR NULLIF PRIX = 'NULL' "to_number(:PRIX,'9999999D99','NLS_NUMERIC_CHARACTERS= '',.''')",
ACHETEUR_ID)
Une belette, un lapin !?
C'est pas normal! Répondre à asevere | MERCI!! Toute mais lignes se charges, mais y'a toujours un "mais" dsl ^^ mais dans ma colone prix les prix qui sont sensé avoir un point on rien du tout.
un exemple:
mon debut de mon ficher .csv resemble a cela
seq_t_reservations.nextval;9;05/11/2005;CB;289.2;1
seq_t_reservations.nextval;7;02/11/2005;CB;175;72
et quuand je fait un select * from dmlres2; j'ai:
RESERVATION_ID EMPLOYEE_ID DATE_CREATION TYPE_PAIEMENT PRIX ACHETEUR_ID
121 9 05/11/05 CB 2892 1
122 7 02/11/05 CB 175 72
Table DMLRES2, chargé à partir de chaque enregistrement physique.
Option d'insertion en vigueur pour cette table : TRUNCATE
Nom de colonne Position Long. Séparat. Encadrem. Type de données
------------------------------ ---------- ----- ---- ---- ---------------------
RESERVATION_ID FIRST * ; CHARACTER
chaîne SQL pour la colonne : "seq_t_reservations.nextval"
EMPLOYEE_ID NEXT * ; CHARACTER
DATE_CREATION NEXT * ; CHARACTER
TYPE_PAIEMENT NEXT * ; CHARACTER
PRIX NEXT * ; CHARACTER
NULL (non renseigné) si PRIX = 0X4e554c4c(caractère 'NULL')
chaîne SQL pour la colonne : "to_number(:PRIX,'9999999D99','NLS_NUMERIC_CHARACTERS= '',.''')"
ACHETEUR_ID NEXT * ; CHARACTER
Table DMLRES2 :
Chargement réussi de 41 Lignes.
0 Lignes chargement impossible dû à des erreurs de données.
0 Lignes chargement impossible car échec de toutes les clauses WHEN.
0 Lignes chargement impossible car tous les champs étaient non renseignés.
Espace affecté au tableau de liens : 99072 octets(64 lignes)
Octets de tampon de lecture : 1048576
Nombre total d'enregistrements logiques ignorés : 0
Nombre total d'enregistrements logiques lus : 41
Nombre total d'enregistrements logiques rejetés : 0
Nombre total d'enregistrements logiques mis au rebut : 0 Répondre à Hellreaper |
| Et avec ça ?
PRIX CHAR NULLIF PRIX = 'NULL' "to_number(:PRIX,'9999999D99','NLS_NUMERIC_CHARACTERS= ''. ''')", J'ai pas trop regardé le fonctionnement de NLS_NUMERIC_CHARACTERS et mes ébats avec Oracle me semble bien loin :)
A prioris, le premier caractère est le séarateur décimal (dans ton cas "." le second celui des milliers (dans ton cas, je ne sais pas...)
As-tu un prix superieur à 1000 ? Si oui, peux-tu nous coller une de ces lignes ?
A priori si tes nombre sont du style 1<espace>000.12 alors tu doit utiliser la séquence ".<espace>" s'ils sont de la forme 1000.12 , tu peux peut-être utiliser "." seulement...
Une belette, un lapin !?
C'est pas normal! Répondre à asevere |
| A fin d'en faire éventuellement une astuce, pourrais-tu me donner le retoure de la requête suivante jouée sur ta base de données ? SELECT * FORM V$PARAMETER WHERE NAME = 'NLS_NUMERIC_CHARACTERS'; Merci d'avance
Une belette, un lapin !?
C'est pas normal! Répondre à asevere | Voici se que tu ma demander:
SELECT * FROM V$PARAMETER WHERE NAME = 'NLS_NUMERIC_CHARACTERS';
ORA-00942: Table ou vue inexistante
----
Mais c bon la commande que tu ma donner plus haut focntion trés bien! Encore Merci Répondre à Hellreaper |
| Content que ça fonctionne enfin pour toi! :)
Puis-je te demander une dernière requête (en espérant qu'elle ne soit pas fausse comme la dernière) afin d'aiguiller les autres utilisateurs qui auraient éventuellement le même problème que toi:
SELECT * FROM NLS_SESSION_PARAMETERS;
A plus
Une belette, un lapin !?
C'est pas normal! Répondre à asevere | Voila pour ta dernière commande , dsl sa resemble a rien:
PARAMETER VALUE
NLS_LANGUAGE FRENCH
NLS_TERRITORY FRANCE
NLS_CURRENCY €
NLS_ISO_CURRENCY FRANCE
NLS_NUMERIC_CHARACTERS ,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD/MM/RR
NLS_DATE_LANGUAGE FRENCH
NLS_SORT FRENCH
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD/MM/RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD/MM/RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENC Y €
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP F ALSE Répondre à Hellreaper | Merci, c'est pile poil ce que je voulais :-)
A plus
Une belette, un lapin !?
C'est pas normal! Répondre à asevere |
|
|
|
|
|
|
|
|