Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour 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 23/06/2008, 17h59   #1
Invité régulier
 
Inscription : juin 2006
Messages : 39
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juin 2006
Messages : 39
Points : 8
Points : 8
Par défaut Manipulation du paquetage UTL_FILE

Bonjour,

Où est ce qu on peut trouver les repertoires créés suite à ces commandes :

Code :
1
2
3
4
5
SQL> CREATE DIRECTORY FICHIERS_IN AS 'd:\fichiers\in' ;
SQL> GRANT READ ON DIRECTORY FICHIERS_IN TO PUBLIC ;
 
SQL> CREATE DIRECTORY FICHIERS_OUT AS 'd:\fichiers\out' ;
SQL> GRANT READ, WRITE ON DIRECTORY FICHIERS_OUT TO PUBLIC ;
NB1 : les commandes s'exécutent correctement
NB2 : version Oracle 9 installé sur un serveur Unix.
merci
rinuom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 23h41   #2
Membre habitué
 
Inscription : février 2006
Messages : 139
Détails du profil
Informations personnelles :
Âge : 37
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : février 2006
Messages : 139
Points : 126
Points : 126
Bonsoir,

UTL_FILE sert à ecrire sur le serveur.
Les repertoires crees sont egalement sur le serveur mais si c'est un UNIX il faudrait plutot faire /home/...

cdt
kervoaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 01h21   #3
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 10h02   #4
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Attention ces commandes ne servent pas à créer des répertoires physiques, mais à donner l'autorisation à un utilisateur oracle pour écrire dans les répertoires. Les répertoires physiques doivent ensuite avoir les droits nécessaires pour que l'utilisateur système propriétaire de l'installation oracle puisse écrire/lire dedans.
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 11h08   #5
Invité régulier
 
Inscription : juin 2006
Messages : 39
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juin 2006
Messages : 39
Points : 8
Points : 8
Citation:
Envoyé par plaineR Voir le message
Attention ces commandes ne servent pas à créer des répertoires physiques, mais à donner l'autorisation à un utilisateur oracle pour écrire dans les répertoires. Les répertoires physiques doivent ensuite avoir les droits nécessaires pour que l'utilisateur système propriétaire de l'installation oracle puisse écrire/lire dedans.
Lorsque j'exécute mon script :

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
46
47
48
49
50
51
52
53
54
55
56
Declare
  -- Noms des fichiers --
  LC$Fic_in   Varchar2(128) := 'test.txt' ;       -- a adapter sur votre configuration
  LC$Fic_out  Varchar2(128) := 'test1.txt' ;      -- a adapter sur votre configuration
  -- Noms des répertoires --
  LC$Dir_in   Varchar(30)   := 'FICHIERS_IN';    -- a adapter sur votre configuration
  LC$Dir_out  Varchar(30)   := 'FICHIERS_OUT' ;  -- a adapter sur votre configuration
  -- Pointeurs de fichier --
  LF$FicIN	UTL_FILE.FILE_TYPE ;
  LF$FicOUT	UTL_FILE.FILE_TYPE ;
  -- Tampon de travail --  
  LC$Ligne	Varchar2(32767) ;  
  -- Message --
  LC$Msg    Varchar2(256) ;
  -- Exception --
  LE$Fin    Exception ;
Begin
 
  -- Ouverture du fichier en entrée
  Begin
    LF$FicIN := UTL_FILE.FOPEN( LC$Dir_in, LC$Fic_in, 'R', 32764 ) ;
  Exception
    When OTHERS Then
	LC$Msg := SQLERRM || ' [' || LC$Dir_in || '] -> ' || LC$Fic_in;
	Raise LE$Fin ;
  End ;
 
  -- Ouverture du fichier en sortie
  Begin
    LF$FicOUT := UTL_FILE.FOPEN( LC$Dir_out, LC$Fic_out, 'W', 32764 ) ;
  Exception
    When OTHERS Then
	LC$Msg := SQLERRM || ' [' || LC$Dir_out || '] -> ' || LC$Fic_out;
	Raise LE$Fin ;
  End ;	
 
  -- Traitement --
  Begin
     Loop
	-- lecture du fichier en entrée --
	UTL_FILE.GET_LINE( LF$FicIN,  LC$Ligne ) ;
	-- écriture du fichier en sortie --
	UTL_FILE.PUT_LINE( LF$FicOUT, LC$Ligne ) ;
     End loop ;
  Exception
     When NO_DATA_FOUND Then -- Fin du fichier en entrée
        -- Fermeture des fichiers --
	UTL_FILE.FCLOSE( LF$FicIN ) ;
	UTL_FILE.FCLOSE( LF$FicOUT ) ;
  End  ;		 		
 
Exception
   When LE$Fin Then
     UTL_FILE.FCLOSE_ALL ;
     RAISE_APPLICATION_ERROR( -20100, LC$Msg ) ;
End ;
j'ai l'erreur suivante :

ORA-20100: User-Defined Exception [FICHIERS_IN] -> test.txt

Cette erreur est générée au niveau de :

Code :
LF$FicIN := UTL_FILE.FOPEN( LC$Dir_in, LC$Fic_in, 'R', 32764 ) ;
J'ai recherché sur le forum, j'ai trouvé une discusion qui parle de ça mais tjs pas de reponse : http://www.developpez.net/forums/sho...ined+exception

NB : je travaille avec Oracle 9

Merci
rinuom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 11h19   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
plutôt que jeter une erreur applicative ce serait plus intelligent d'afficher l'erreur Oracle pour comprendre le problème
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 11h29   #7
Invité régulier
 
Inscription : juin 2006
Messages : 39
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juin 2006
Messages : 39
Points : 8
Points : 8
Citation:
Envoyé par orafrance Voir le message
plutôt que jeter une erreur applicative ce serait plus intelligent d'afficher l'erreur Oracle pour comprendre le problème
Voici l'erreur Oracle :

Code :
1
2
3
4
5
6
7
DECLARE
*
ERROR at line 1:
ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at "SYS.UTL_FILE", line 98
ORA-06512: at "SYS.UTL_FILE", line 157
ORA-06512: at line 4
Rq: pour 'FICHIERS_IN' j'ai définie un répertoire sur ma machine : "d:\fichiers\in" alors qu'Oracle est installé sur un serveur distant.
Est ce que ça pose un problème ??

Merci
rinuom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 11h31   #8
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Citation:
Envoyé par rinuom Voir le message
Voici l'erreur Oracle :

Rq: pour 'FICHIERS_IN' j'ai définie un répertoire sur ma machine : "d:\fichiers\in" alors qu'Oracle est installé sur un serveur distant.
Est ce que ça pose un problème ??

Merci
Tu lis les réponses que l'on te donne ?

Citation:
Envoyé par kervoaz Voir le message
Bonsoir,

UTL_FILE sert à ecrire sur le serveur.
Les repertoires crees sont egalement sur le serveur
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 11h40   #9
Invité régulier
 
Inscription : juin 2006
Messages : 39
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juin 2006
Messages : 39
Points : 8
Points : 8
Citation:
Envoyé par plaineR Voir le message
Tu lis les réponses que l'on te donne ?
En fait j'ai mal posé ma question,, je voulais demander si c'est possible
Mais bon il est clair que ce n'est pas le cas.

Merci pour vos réponses.
rinuom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 11h44   #10
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Non, utl_file ne permet d'écrire que dans les répertoires visibles du serveur de base de données.
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 11h50   #11
Invité régulier
 
Inscription : juin 2006
Messages : 39
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juin 2006
Messages : 39
Points : 8
Points : 8
Citation:
Envoyé par plaineR Voir le message
Non, utl_file ne permet d'écrire que dans les répertoires visibles du serveur de base de données.
EN fait moi j'ai executé :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
SQL> CREATE DIRECTORY FICHIERS3_IN AS '/users/test/test_rm';
 
Directory created.
 
SQL> GRANT READ ON DIRECTORY FICHIERS3_IN TO PUBLIC ;
 
GRANT succeeded.
 
SQL> GRANT READ ON DIRECTORY FICHIERS3_IN TO PUBLIC;
 
GRANT succeeded.
ça marche.

mais quand j'execute ce code par exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
DECLARE
 
nom_rep VARCHAR2(1000) := '/users/test/test_rm';
nom_fic VARCHAR2(1000) := 'test.txt';
ligne_fic VARCHAR2(32767);
contenu_fic UTL_FILE.file_type;
 
BEGIN
contenu_fic := UTL_FILE.FOPEN(nom_rep, nom_fic, 'r', 32764);
LOOP
BEGIN
UTL_FILE.GET_LINE (contenu_fic, ligne_fic);
DBMS_OUTPUT.PUT_LINE(ligne_fic);
EXCEPTION
WHEN NO_DATA_FOUND THEN
UTL_FILE.FCLOSE(contenu_fic);
EXIT;
END;
END LOOP;
END;
ça genere l'erreur :

Code :
1
2
3
4
5
6
7
DECLARE
*
ERROR at line 1:
ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at "SYS.UTL_FILE", line 98
ORA-06512: at "SYS.UTL_FILE", line 192
ORA-06512: at line 9
Franchement je n'arrive pas à trouver l'erreur.
merci pour votre aide.
rinuom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 11h59   #12
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Tu es en quelle version d'oracle ?
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 12h00   #13
Invité régulier
 
Inscription : juin 2006
Messages : 39
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juin 2006
Messages : 39
Points : 8
Points : 8
Citation:
Envoyé par plaineR Voir le message
Tu es en quelle version d'oracle ?
Ce dernier Script je le teste sur la version Oracle 8
rinuom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 12h06   #14
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Les directories ne fonctionnent pas avant la 9i.

Il faut que tu renseignes le paramètre utl_file_dir dans le fichier init.ora. La prise en compte de ce paramètre ne se fera qu'après redémarrage de la base.

Pour plus d'informations :
http://sheikyerbouti.developpez.com/...?page=Chap8#L8
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 12h15   #15
Invité régulier
 
Inscription : juin 2006
Messages : 39
Détails du profil
Informations personnelles :
Localisation : Maroc

Informations forums :
Inscription : juin 2006
Messages : 39
Points : 8
Points : 8
Citation:
Envoyé par plaineR Voir le message
Les directories ne fonctionnent pas avant la 9i.

Il faut que tu renseignes le paramètre utl_file_dir dans le fichier init.ora. La prise en compte de ce paramètre ne se fera qu'après redémarrage de la base.

Pour plus d'informations :
http://sheikyerbouti.developpez.com/...?page=Chap8#L8
Merci bcp
rinuom 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 03h20.


 
 
 
 
Partenaires

Hébergement Web