Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 28/12/2011, 12h14   #1
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 287
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 287
Points : 30
Points : 30
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)
rimas2009 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 12h38   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 440
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 440
Points : 4 183
Points : 4 183
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
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 13h19   #3
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 470
Points : 2 470
Envoyer un message via Yahoo à zinzineti
Tu peux utiliser cette procédure stockée

Code :
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
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 14h58   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Si on passe par un fichier CSV, un simple mapping de table externe (10g) sera suffisant !
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 15h19   #5
Rédacteur
 
Inscription : décembre 2002
Messages : 2 389
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 389
Points : 3 276
Points : 3 276
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 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/12/2011, 13h40   #6
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 287
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 287
Points : 30
Points : 30
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 :
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)
rimas2009 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 02h11.


 
 
 
 
Partenaires

Hébergement Web