Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/03/2007, 16h08   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 32
Points : 10
Points : 10
Par défaut Oracle 9.2 : Importation et champ date NULL

Bonjour !

J'ai un petit soucis avec ma base oracle. Je possède une table avec un champ "COL_DATE_SORTIE" de type "DATE" ayant la propriété "NULLABLE" à yes.
Pour manager ma base j'utilise l'application Oracle SQL Developer.

Mon soucis est le suivant : je dois importer des champs à partir d'un fichier excel. Parfois, ce champ est remplis, parfois non, ce qui fait que quand je tente d'importer, je me retrouve un TO_DATE('NULL','') et évidemment il n'apprécie pas trop qu'on lui laisse le choix dans la date.

Voici une capture d'écran un peu plus parlante.



Il y a-t-il un moyen de contourner cela ?

Merci d'avance
mimil77210 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 09h08   #2
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 32
Points : 10
Points : 10
Je remonte mon sujet. Je ne comprends pas pourquoi je ne peux pas mettre une date à null
mimil77210 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 09h27   #3
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Bonjour,

tu peux peut être t'en sortir avec un NVL ou un decode
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 09h42   #4
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 32
Points : 10
Points : 10
Salut !

Je ne vois pas trop comment c'est possible de mettre en place un NVL dans le cadre d'une importation via un fichier excel.
mimil77210 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 09h55   #5
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Perso, je n'ai jamais fait d'import direct, comme ça,
cela dit, je pense que tu peux mettre un masque pour tes données, non ?

le to_date('','') que tu parles, tu l'indique bien quelque part, non ?

je complète :
Code :
SELECT to_date(DECODE('NULL','NULL',''),'DDMMYYYY') FROM dual
ce genre de requete passe, donc je pense que tu peux peut être essayer ça
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 10h00   #6
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 32
Points : 10
Points : 10
Ce code est généré automatiquement par oracle. C'est le seul moyen que j'ai d'importer ces données. Je me vois mal tapper le nom des 2000 collaborateurs à la main. Je peux indiquer le format de la date sous la forme DD/MM/AAAA, ce qui donne quelque chose du genre to_date('NULL','DD/MM/AAAA') si le champ date est vide dans ma feuille excel. Et ça evidemment il n'en veut pas.

edit : je vais essayer de modifier le code, mais ça me parait impossible.
mimil77210 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 10h07   #7
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 32
Points : 10
Points : 10
Je confirme qu'il n'est pas possible de modifier le code SQL généré automatiquement par oracle. N'y aurait-il pas moyen de faire quelque chose par le biais d'un trigger ?
mimil77210 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 10h30   #8
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
Salut,
et si tu traites le problème à la source, c'est à dire dans Excel...

avec une fonction Excel sur la colonne en question, tu remplace toute cellule vide par NULL (sans simple quote, sans guillemets, sans rien...) est-ce que Oracle ne vas pas alors identifier correctement la valeur NULL ?
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 10h47   #9
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 32
Points : 10
Points : 10
Même problême. En fait, si il n'y a rien dans la cellule, il mets NULL, et si je mets NULL dans la cellule il prends ça pour un champ de caractère et prends la valeur texte NULL.

insert into COLLABORATEUR (COL_ID,COL_DATE_SORTIE) VALUES(1,TO_DATE('NULL','DD/MM/YYYY'));
mimil77210 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 10h59   #10
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
Citation:
Envoyé par mimil77210
Même problême. En fait, si il n'y a rien dans la cellule, il mets NULL, et si je mets NULL dans la cellule il prends ça pour un champ de caractère et prends la valeur texte NULL.

insert into COLLABORATEUR (COL_ID,COL_DATE_SORTIE) VALUES(1,TO_DATE('NULL','DD/MM/YYYY'));
euuuuh mais dans ce cas je ne comprends pas... tu dis que si il n'y a rien, il met NULL... c'est bien ce qu'on veut non ?

le but est bien d'avoir
Code :
INSERT INTO COLLABORATEUR (COL_ID,COL_DATE_SORTIE) VALUES(1,NULL);
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 11h00   #11
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Et en mettant un blanc dans la colonne excel qui pose problème, ça donne quoi ?
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 11h01   #12
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
une autre solution (moins propre) consisterait à remplacer les cellules vides (celles que tu veux à NULL) par une date bidon facilement identifiable, genre 01.01.1800, puis tu fais un update par-dessus pour mettre à NULL partout où la date = 01.01.1800
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 11h16   #13
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Sous Toad, l'import excel d'une colonne date nulle marche bien.
Ce serait un bug sql dev.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 11h46   #14
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 32
Points : 10
Points : 10
De base, la générateur de code de sql developper génère ça :

Code :
1
2
 
INSERT INTO COLLABORATEUR (COL_ID,COL_DATE_SORTIE) VALUES(,TO_DATE('','DD/MM/YYYY'));
Qu'il va complêter en allant rechercher les valeurs dans le fichier excel. Avec une date normale, tout va bien :

Code :
1
2
 
INSERT INTO COLLABORATEUR (COL_ID,COL_DATE_SORTIE) VALUES(1,TO_DATE('01/02/2006','DD/MM/YYYY'));
Cependant, si il n'y a rien dans la case correspondant à la date ( autrement dis, la valeur NULL), il génère ça :

Code :
1
2
 
INSERT INTO COLLABORATEUR (COL_ID,COL_DATE_SORTIE) VALUES(1,TO_DATE('NULL','DD/MM/YYYY'));
D'où le problême.

Citation:
une autre solution (moins propre) consisterait à remplacer les cellules vides (celles que tu veux à NULL) par une date bidon facilement identifiable, genre 01.01.1800, puis tu fais un update par-dessus pour mettre à NULL partout où la date = 01.01.1800
C'est une très bonne idée. Les methodes "sales" me conviennent aussi
mimil77210 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 12h10   #15
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 32
Points : 10
Points : 10
Ce programme est décidément complètement débile. Petit exemple : dans la cellule il y a marqué 01/12/2007, lui il récupère 12/01/07. Géniale ... Mais attendez le plus fort ! Si jamais il y a marqué 01/01/1800, cette fois il récupère 01/01/1800. Du coup je vais tenter avec 01/01/99 :p
mimil77210 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2008, 09h53   #16
Invité régulier
 
Inscription : avril 2008
Messages : 24
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : avril 2008
Messages : 24
Points : 6
Points : 6
c'est une histoire de format de date

en angleterre c'est mm/jj/aaaa alors qu'en france c'est jj/mm/aaaa
C'est pour sa qu'il récupère pas comme tu veux!
Nivrae est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2008, 15h25   #17
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
merci de m'avoir fait découvrir cette option d'import sur Oracle SQL Developer...

Manque de pot, il ne reconnait pas le japonais...

Pourtant mon poste me semble configuré correctement puisque j'y arrive par une autre méthode en passant par access.

Tant pis.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h57.


 
 
 
 
Partenaires

Hébergement Web