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

PL/SQL Oracle Discussion :

Procédure stockée pour importer des données ?


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Points : 62
    Points
    62
    Par défaut Procédure stockée pour importer des données ?
    Bonjour a tous,

    Est-il possible de charger dans une table Oracle des données depuis un fichier Excel avec des procedure stockées ?

    Merci.
    "Regarder vos pensées, elles deviennent des mots. Surveillez vos paroles, et elles deviennent des actions. Visionnez vos actions, elles deviennent des habitudes. Surveillez vos habitudes, elles deviennent du caractère. Regarder votre personnage, il devient votre destinée." (Frank Outlaw)

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Non pas directement un fichier excel.
    Tu peux le faire pour un fichier csv (rechercher utl_file)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Tu peux utiliser cette procédure stockée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
     
    create or replace procedure Import_CSV_ToOracleTable( p_table in varchar2,p_cnames in varchar2,p_dir in varchar2,p_filename in varchar2,p_delimiter in varchar2 default '|' )IS 
    /************************************************************************************************ 
    Description : Procedure permettant d'importer un fichier csv dans une table oracle 
    Parametres : 
    p_table -> Table destination, doit avec les memes champs que le fichier source .csv  
    p_cnames -> liste des colonnes séparée par ',' exemple : col1,col2,col3  
    p_dir -> Repertoire du fichier source. Qu'on peut créer avec la fonction CREATE DIRECTORY d'oracle  exemple : CREATE DIRECTORY MON_REPERTOIRE AS C:\Temp 
    p_filename -> Nom du fichier avec l'extension  exemple : 'monfichier.csv' 
    p_delimiter -> Séparateur de champ pour chaque colonne de la requete exemple : ';' 
     
    Auteur : ZINZINDOHOUE ETIENNE 
    ***********************************************************************************************/ 
    l_input utl_file.file_type; 
    l_theCursor integer default dbms_sql.open_cursor; 
    l_buffer varchar2(4000); 
    l_lastLine varchar2(4000); 
    l_status integer; 
    l_colCnt number default 0; 
    l_cnt number default 0; 
    l_sep char(1) default NULL; 
    l_errmsg varchar2(4000); 
    BEGIN 
    l_input := utl_file.fopen( p_dir, p_filename, 'r' ); 
    l_buffer := 'insert into ' || p_table || ' values ( '; l_colCnt := length(p_cnames)-length(replace(p_cnames,',',))+1; 
    for i in 1 .. l_colCnt 
    loop l_buffer := l_buffer || l_sep || ':b'||i; l_sep := ','; 
    end loop; l_buffer := l_buffer || ')'; 
    dbms_sql.parse( l_theCursor, l_buffer, dbms_sql.native ); 
    loop begin utl_file.get_line( l_input, l_lastLine ); exception 
    when NO_DATA_FOUND then exit; 
    end; 
    l_buffer := l_lastLine || p_delimiter; 
    for i in 1 .. l_colCnt 
    loop dbms_sql.bind_variable( l_theCursor, ':b'||i, substr( l_buffer, 1, instr(l_buffer,p_delimiter)-1 ) ) ; 
    l_buffer := substr( l_buffer, instr(l_buffer,p_delimiter)+1 ); 
    end loop; 
    begin l_status := dbms_sql.execute(l_theCursor); l_cnt := l_cnt + 1; exception 
    when others then l_errmsg := sqlerrm; 
    insert into badlog ( errm, data ) values ( l_errmsg, l_lastLine ); 
    end; end loop; 
    dbms_sql.close_cursor(l_theCursor); utl_file.fclose( l_input ); 
    commit; --return l_cnt; 
    END Import_CSV_ToOracleTable;
    Etienne ZINZINDOHOUE
    Billets-Articles

  4. #4
    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
    Si on passe par un fichier CSV, un simple mapping de table externe (10g) sera suffisant !

  5. #5
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Si on passe par un fichier CSV, un simple mapping de table externe (10g) sera suffisant !
    J'allais proposer cette piste aussi, qui peut parfois convenir, et ce dès la version 9i.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Points : 62
    Points
    62
    Par défaut
    Merci pour vos reponses rapides.

    pouvez-vous me détaillé la procedure ?
    j'ai pas compris le p_cnames !!
    comment on fait appel par exmple avec ce fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ID | NOM               | PRENOM   | age   |
    1  | ZINZINDOHOUE     | ETIENNE   | 2000 |
    2  | RIMAS             | DEV         | 500   |
    la table à les meme colonnes.
    et c'est possible d'executer directement la procedure dans Sql-Developer ? comment ?

    Merci.
    "Regarder vos pensées, elles deviennent des mots. Surveillez vos paroles, et elles deviennent des actions. Visionnez vos actions, elles deviennent des habitudes. Surveillez vos habitudes, elles deviennent du caractère. Regarder votre personnage, il devient votre destinée." (Frank Outlaw)

Discussions similaires

  1. procédure stockée pour copier des données entre 2 tables
    Par zaki_1982 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 15/02/2012, 07h50
  2. Liste des procédures stockées pour un role donné
    Par serge benhamou dans le forum Développement
    Réponses: 4
    Dernier message: 22/11/2010, 14h24
  3. Procédure Stockée pour créer des TABLE dynamiquement
    Par GuyverZ dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/05/2009, 22h29
  4. Script pour importer des donnés
    Par chrosnir dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/12/2007, 12h46
  5. [SQLserver2000] Lire un fichier pour importer des données
    Par cladsam dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 01/10/2007, 10h40

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