IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Import/Export Oracle Discussion :

Importer un fichier csv dans une table avec une commande sql ?


Sujet :

Import/Export Oracle

  1. #1
    Membre habitué

    Inscrit en
    Février 2005
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 356
    Points : 175
    Points
    175
    Par défaut Importer un fichier csv dans une table avec une commande sql ?
    Bonjour,

    Je dois créer une application où celle-ci devra importer dans une table, un fichier csv avec des centaines de milliers de lignes.

    Exemple du fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    9974231454123;PANTHALON;52;E14;01/06/2014;1;51
    J'aimerais importer ce fichier dans une table.

    Existe t-il une commande sql pour importer en 1 fois, un fichier vers une table ?

    J'ai essayé la commande sql ci-dessous dans mon programme delphi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    load data
    infile 'c:\test.csv'
    into table test_import_file
    fields terminated by ";"
    ( cb, nom, taille, saison, date, cpt, stk )
    Ca ne fonctionne pas, il me dit : ORA-00900: Instruction sql non valide


    Toad for Oracle ou Sql developper ont des fonctions à peu près similaire permettant de faire ce genre de chose.

    - Qu'existe t-il aujourd'hui pour arriver à importer un fichier dans une table, en commande sql ?!

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 788
    Points
    30 788
    Par défaut
    Il faudrait te tourner vers l'utilitaire SQL*Loader
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par pepito62 Voir le message
    ...
    Existe t-il une commande sql pour importer en 1 fois, un fichier vers une table ?
    ...
    - Qu'existe t-il aujourd'hui pour arriver à importer un fichier dans une table, en commande sql ?!
    Créez une table externe et après c'est juste un simple commande de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    insert into ...
    select ...
      from table_externe

  4. #4
    Membre habitué

    Inscrit en
    Février 2005
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 356
    Points : 175
    Points
    175
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Il faudrait te tourner vers l'utilitaire SQL*Loader
    En effet le code que j'ai mis dans mon 1er post concerne du code sql loader

    Mais je n'ai pas l'utilitaire SQL Loader nommé "sqldr*.exe" sur ma machine

    http://jaouad.developpez.com/sqlldr/

    Ou le trouver ? L'utilitaire peut être copier dans n'importe quel dossier de Windows ?
    Exemple : sqldr.exe situé dans le répertoire de mon application ?

    Comment et quand est censé être installé cette utilitaire ?

    Citation Envoyé par mnitu Voir le message
    Créez une table externe et après c'est juste un simple commande de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    insert into ...
    select ...
      from table_externe
    Euh oui pourquoi pas mais il manque des étapes là... Comment créer une table externe avec mon fichier ??????

    Pouvez-vous en dire un peut plus.

    Merci

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par pepito62 Voir le message
    ...
    Euh oui pourquoi pas mais il manque des étapes là... Comment créer une table externe avec mon fichier ??????
    External Tables: Querying Data From Flat Files in Oracle

  6. #6
    Membre habitué

    Inscrit en
    Février 2005
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 356
    Points : 175
    Points
    175
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE OR REPLACE DIRECTORY ext_tab_data AS '/data';
    Apparemment il faut créer un alias et préciser le répertoire où se situe le fichier.

    ici "/data" correspond au répertoire data du serveur BDD ?

    On ne peut pas préciser un répertoire local du programme client ? (Exemple C:\logiciel\data_file)

    Et même si on peut donner un accès au répertoire local du client, ça ne sera pas "C:\logiciel\data_file" mais "\\pcmachin\logiciel\data_file"


    C'est assez embêtant, il n'y a pas plus "simple" ?

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Oracle est une base de données s'appuyant sur un serveur.
    In fine, vos données doivent se trouver sur ce serveur.

    Pour charger un fichier, vous avez plusieurs méthodes (liste non-exhaustive) :
    1. Le copier sur le serveur, puis le monter en base avec SQL*Loader ou une table externe par exemple.
    2. Le garder sur votre poste, et demander à votre client d'envoyer les données (SQL*Developer le fait par exemple), mais ce n'est pas forcément très performant avec de la volumétrie.
    3. Utiliser un ETL, vous faites le mapping et un peu de configuration et l'ETL se chargera de monter les données (ligne à ligne ou batch en fonction des connecteurs disponibles).
    4. Utiliser un programme C++, Java ou autre qui fera ce chargement mais il faudra coder.


    Pour un chargement one-shot, la première solution est la plus simple. La première fois vous aller vous casser un peu les dents, mais une fois que vous avez compris tous les éléments en jeu ça roule bien.
    Pour un chargement régulier, il faut scripter.
    J'ai une préférence pour les chargement via ETL car ils sont plus simple à prendre en main que des gros shells, mais ça reste un outil à apprendre.

  8. #8
    Membre habitué

    Inscrit en
    Février 2005
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 356
    Points : 175
    Points
    175
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Oracle est une base de données s'appuyant sur un serveur.
    In fine, vos données doivent se trouver sur ce serveur.

    Pour charger un fichier, vous avez plusieurs méthodes (liste non-exhaustive) :
    1. Le copier sur le serveur, puis le monter en base avec SQL*Loader ou une table externe par exemple.
    2. Le garder sur votre poste, et demander à votre client d'envoyer les données (SQL*Developer le fait par exemple), mais ce n'est pas forcément très performant avec de la volumétrie.
    3. Utiliser un ETL, vous faites le mapping et un peu de configuration et l'ETL se chargera de monter les données (ligne à ligne ou batch en fonction des connecteurs disponibles).
    4. Utiliser un programme C++, Java ou autre qui fera ce chargement mais il faudra coder.


    Pour un chargement one-shot, la première solution est la plus simple. La première fois vous aller vous casser un peu les dents, mais une fois que vous avez compris tous les éléments en jeu ça roule bien.
    Pour un chargement régulier, il faut scripter.
    J'ai une préférence pour les chargement via ETL car ils sont plus simple à prendre en main que des gros shells, mais ça reste un outil à apprendre.
    Merci pour toutes ces infos, maintenant je suis fixé.

  9. #9
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut copie csv
    Je ne sais pas is je vais répondre à la question mais dans postgres, pour importer un csv il faut d’abord créer toutes les colonnes de ton csv dans l'ordre de ton csv c'est à dire si tu as banane;30gr;oui comme données tu dois créer un table appelons là REF_FRUIT avec les champs typ_fruit poids comestible par exemple dans cet ordre. Tu dois mettre tes données sur ton serveur dans l'exmple local on met le csv à la racine de C. Ensuite par requête SQL

    copy REF_FRUIT from 'C:\nom_du_fichier.csv delimiter ';'

    Le délimiter de ton csv tu peux le voir en ouvrant ton fichier avec le bloc note par exemple, c'est ce qui va séparer tes données.
    Ne pas oublier de mettre l'extension du fichier dans la requête.

    De plus, si tu as des problèmes de droit sur ton ordinateur pour autoriser ton logiciel de base de donnée à écrire sur C ou sur ton autre serveur tu dois aller dans les propriétés du lecteur, puis dans sécurité, modifier, ajouter, tu tape les 3 premières lettre tou puis tu fais vérifier les noms, tu devrais trouver tout le monde ou everyone tu choisit ça puis tu lui met un contrôle total dans la fenêtre d'avant. Ceci étant fait tu fais ok partout tu aura un message de vigilance tu fais oui puis il va mettre un peu de temps pur le faire.
    Ensuite tu relance ta requête. Normalement ça devrait fonctionner, enfin sur postgres cela fonctionne. J'espère avoir aider mais je pense que ma réponse est tardive.

Discussions similaires

  1. Importer un fichier excel dans 2 tables avec creation d'identificateurs
    Par ammarijel dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 17/11/2014, 14h17
  2. Réponses: 5
    Dernier message: 29/10/2014, 12h52
  3. [MySQL] requete dans une table avec une varible d'une autre table
    Par kogoi dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 03/11/2011, 15h24
  4. Importer un fichier texte dans des champs d'une table
    Par Cyriusix dans le forum Modélisation
    Réponses: 1
    Dernier message: 17/04/2008, 14h18
  5. Réponses: 6
    Dernier message: 30/08/2007, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo