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 07/07/2006, 11h16   #1
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 133
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 133
Points : 32
Points : 32
Par défaut UTL_FILE.FOPEN avec directory oracle

Bonjour,

Sous oracle 10g j'ai créé des directory (j'en avais besoin pour des external tables, par : CREATE OR REPLACE DIRECTORY inDir AS 'F:\MyPath', je voudrais savoir s'il est possible d'utiliser une de ces directory dans le UTL_FILE.FOPEN(directory, 'fic.log', w) ? Apparemment non mais comment peut-on récupérer la valeur de cette directory pour ouvrir ce fichier ?

Cordialement.
fguigui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 11h38   #2
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:
je voudrais savoir s'il est possible d'utiliser une de ces directory dans le UTL_FILE.FOPEN(directory, 'fic.log', w) ?
oui, bien sûr
__________________
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 07/07/2006, 11h40   #3
Membre actif
 
Inscription : avril 2006
Messages : 133
Détails du profil
Informations personnelles :
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : avril 2006
Messages : 133
Points : 156
Points : 156
Il faut simplement mettre ta directory en majuscule dans ton fopen ...
jlucch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 11h43   #4
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Citation:
Envoyé par jlucch
Il faut simplement mettre ta directory en majuscule dans ton fopen ...
Oui. Pour vous en assurer, afficher le contenu de la vue USER_DIRECTORIES ou ALL_DIRECTORIES
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 11h59   #5
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 133
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 133
Points : 32
Points : 32
Ca marche pas, y a une erreur de compil. : PLS-00201 : L'identificateur 'OUTDIR' doit être déclaré, et puis la signature de la méthode fopen semble attendre une chaîne de car., sinon je pourrais récupérer la valeur dans ALL_DIRECTORIES.

Cordialement.
fguigui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 12h01   #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
si c'est un chemin de disque réseau ça peut pas marcher, il faut indiquer le chemin complet : //machine/répertoire
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 14h40   #7
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 133
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 133
Points : 32
Points : 32
Ben si finalement ça marche, il faut mettre le nom de la directory en majuscule entre quote, et le chemin se trouve sur le disque F: qui est en réseau.


Cordialement.
fguigui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 15h29   #8
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 133
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 133
Points : 32
Points : 32
J'enlève temporairement le 'Résolu' de ce topic, question subsidiaire sous Oracle 10g pour l'ouverture d'un fichier (UTL_FILE.FOPEN) est-on obligé de mettre un chemin (C:\....) ou une directory oracle (dans la table all_directories). Ou alors peut-on mettre un chemin après l'avoir mis dans all_directories (après un create directory) ?

Cordialement.
fguigui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 08h53   #9
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
Citation:
Envoyé par fguigui
Ben si finalement ça marche, il faut mettre le nom de la directory en majuscule entre quote, et le chemin se trouve sur le disque F: qui est en réseau.
ça doit être nouveau alors, en 9i ce n'était pas possible

Sinon, je ne comprends pas la question... tu veux spécifier le chemin du directory qu'on trouve dans all_directories ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 09h41   #10
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 133
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 133
Points : 32
Points : 32
Citation:
Sinon, je ne comprends pas la question... tu veux spécifier le chemin du directory qu'on trouve dans all_directories ?
Ben je voudrais, au choix, soit mettre un chemin (c:\.....) soit une directory oracle.

Citation:
ça doit être nouveau alors, en 9i ce n'était pas possible
En fait j'ai directories oracle qui pointent sur le disque F: qui est en réseau, ça fonctionne (je suis en oracle 10g).

Cordialement
fguigui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 09h50   #11
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
bah oui, tu fais ce que tu veux, tu mets soit le chemin soit le directory
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 18h05   #12
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 133
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 133
Points : 32
Points : 32
Citation:
Envoyé par Fred_D
bah oui, tu fais ce que tu veux, tu mets soit le chemin soit le directory
Apparemment, il faudra que je vérifie, ça fonctionnerait ainsi :
- si on met un chemin : il faut qu'il soit sur le disque dur (C: ou D.
- si on met une directory oracle, peu importe le chemin mis dans all_directories, qq soit le disque dur dans le réseau ça fonctionne.


Cordialement
fguigui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2009, 06h17   #13
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 157
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 157
Points : 34
Points : 34
Je suis sur unix sous oracle 9
J'ai suivi ce tuto:
http://www.adp-gmbh.ch/ora/sql/create_directory.html

J'ai essayé avec les DIRECTORY où il rentre dans l'exception
-20054: 'Invalid Operation'

En mettant directement le path "/tmp", je n'ai pas d'erreur mais le fichier sql_error.log n'est pas crée.

Voici ma procédure:
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
CREATE OR REPLACE PROCEDURE ORACLE.utl_file_write (
  text       IN varchar2)
IS
    output_file  utl_file.file_type;
begin
    output_file := utl_file.fopen ('ERROR_LOG','sql_error.log', 'W');
    utl_file.put_line (output_file, text);
    utl_file.fclose(output_file);
EXCEPTION
  WHEN utl_file.invalid_mode THEN
    RAISE_APPLICATION_ERROR (-20051, 'Invalid Mode Parameter');
  WHEN utl_file.invalid_path THEN
    RAISE_APPLICATION_ERROR (-20052, 'Invalid File Location');
  WHEN utl_file.invalid_filehandle THEN
    RAISE_APPLICATION_ERROR (-20053, 'Invalid Filehandle');
  WHEN utl_file.invalid_operation THEN
    RAISE_APPLICATION_ERROR (-20054, 'Invalid Operation');
  WHEN utl_file.read_error THEN
    RAISE_APPLICATION_ERROR (-20055, 'Read Error');
  WHEN utl_file.write_error THEN
    RAISE_APPLICATION_ERROR (-20056, 'Read Error');   
  WHEN utl_file.internal_error THEN
    RAISE_APPLICATION_ERROR (-20057, 'Internal Error');
  WHEN utl_file.charsetmismatch THEN
    RAISE_APPLICATION_ERROR (-20058, 'Opened With FOPEN_NCHAR But Later I/O Inconsistent');
  WHEN utl_file.invalid_maxlinesize THEN
    RAISE_APPLICATION_ERROR(-20060,'Line Size Exceeds 32K');
  WHEN others THEN
    RAISE_APPLICATION_ERROR (-20099, 'Unknown UTL_FILE Error');	
end utl_file_write;
/
voici la fonction Pro*c qui appelle cette procédure:
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
long sqlerr_blank(void *contxt)
{
EXEC SQL BEGIN DECLARE SECTION;
  sql_context contx;
  int code;
  varchar msg[256];
EXEC SQL END DECLARE SECTION;
 
  contx = contxt;
 
  EXEC SQL CONTEXT USE :contx;
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  // ON log les erreurs oracle si le code erreur est ngatif
  //IF (sqlca.sqlcode <0)
  //{
	//ON insre un message dans alert log
		//strcpy(code.arr,sqlca.sqlcode);
		code = sqlca.sqlcode;
		strcpy(msg.arr,sqlca.sqlerrm.sqlerrmc);
		EXEC SQL EXECUTE
			BEGIN 
				utl_file_write (to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss') || ': Erreur SQL n' || :code || ': ' || :msg);
			END;
		END-EXEC;
  //} 
  RETURN sqlca.sqlcode;
}
J'arrive à précompiler le .pc et à compiler le .c associé
comprends pas pourquoi il ne me crée pas ce fichier de log
cassy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2009, 23h39   #14
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 157
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 157
Points : 34
Points : 34
personne?
cassy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2009, 05h38   #15
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 157
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 157
Points : 34
Points : 34
j'ai toujours pas trouvé comment résoudre ce problème...
Si quelqu'un a réussi à créer un log avec oracle, pouvait me dire ce qui ne va pas dans la syntaxe...
cassy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2009, 14h31   #16
Membre du Club
 
Étudiant
Inscription : mars 2007
Messages : 163
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2007
Messages : 163
Points : 42
Points : 42
Citation:
Envoyé par cassy Voir le message
j'ai toujours pas trouvé comment résoudre ce problème...
Si quelqu'un a réussi à créer un log avec oracle, pouvait me dire ce qui ne va pas dans la syntaxe...
Cassy,

ça remonte à loin c'est vrai, as-tu trouvé la réponse à ta question?
__________________
mamid
mamid1706 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2009, 15h41   #17
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 319
Points : 5 837
Points : 5 837
Gérer un fichier via UTL_FILE quand on utilise pro*c, moi ça me laisse perplexe. (peut être pour exécuter le pro*c sur un poste client et écrire dans un fichier log sur le serveur)
Donc, c'est quoi la question (avec la version d'Oracle SVP) ?
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2010, 20h10   #18
Débutant
 
saa sa
Inscription : février 2010
Messages : 105
Détails du profil
Informations personnelles :
Nom : saa sa

Informations forums :
Inscription : février 2010
Messages : 105
Points : -8
Points : -8
Envoyer un message via MSN à menoran Envoyer un message via Skype™ à menoran
Par défaut UTL_FILE.FOPEN avec directory oracle

bjour Mr ,moi aussi je cherche cette question :executer le script dans le poste client en utilisant utl_file et modier un fichier oracle dans le serveur
merci d'avance
menoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2010, 15h44   #19
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
FOPEN ne peut pas agir avec le client, juste le serveur. Il faut développer une méthode java me semble-t-il, ça a déjà été indiqué dans le forum.
orafrance 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 21h42.


 
 
 
 
Partenaires

Hébergement Web