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.

  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)

  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;

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    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 461
    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 461
    Points : 8 079
    Points
    8 079
    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.

  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.

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