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 31/01/2008, 17h23   #1
Futur Membre du Club
 
Inscription : juillet 2006
Messages : 55
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 55
Points : 17
Points : 17
Par défaut UTL_FILE : problème d'écriture du fichier

Bonjour,
J'ai un script shell sous unix qui doit extraire des données d'une table Oracle et les écrires dans un fichier sous unix.
J'utilise donc pour cela le sqlplus, pl/sql et le package UTL_FILE.
Voici mon code :
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
 
[...]
ag_num=027
var_rep="/tmp"
var_fic="win_ana_ag"
 
sqlplus -s $USER_ORACLE_APPLI/$PWD_ORACLE_APPLI@$BASE_ORACLE_APPLI <<EOF
 
WHENEVER OSERROR  EXIT 100
WHENEVER SQLERROR EXIT 101
 
SET SERVEROUTPUT ON SIZE 1000000
 
PROMPT --------Appel fonction pl/sql---------------
 
DECLARE
 
  c_repertoire         VARCHAR2(30);
  c_fichier            VARCHAR2(30);
  v_enr                VARCHAR2(500);
  v_fichier            UTL_FILE.FILE_TYPE;
  o_errn               NUMBER(12);
  o_errm               VARCHAR2(255);
  i number(10);
 
	/* declaration du curseur */
	CURSOR C_PART (p_ag_num IN NUMBER) IS
	SELECT DISTINCT cpt_num AS Compte,
				 cpt_exp_nom AS Nom,
				 le_partenaire AS IDF,
				 le_login_tvw AS LoginTVW
	FROM  histo_liaison_edi@TO_CODP.WORLD
	WHERE AG_NUM_COMMERC = p_ag_num
		 /* exclure les agences Domino*/
		 AND le_partenaire NOT LIKE 'DA%FR%CK%'
		 AND le_dat_integration IS NOT NULL
	;
 
	/* declaration des variables*/
	v_Compte VARCHAR2(9);
	v_Nom VARCHAR2(30);
	v_IDF VARCHAR2(15);
	v_LoginTVW VARCHAR2(15);
 
 
/* debut traitement*/
BEGIN
  c_repertoire := '$var_rep';
  c_fichier := '$var_fic';
  v_fichier := utl_file.fopen(c_repertoire, c_fichier, 'w');
  IF NOT UTL_FILE.IS_OPEN( v_fichier ) Then
  	RAISE_APPLICATION_ERROR( -20100, 'Erreur ouverture du fichier ' ) ;
  End IF ;
 
 
  i := 0;
 
		 Open C_PART( '$ag_num' ) ; /* ouverture du curseur avec passage du code agence en parametre */
		 Loop
		    i := i+1;
		 		Fetch C_PART INTO v_Compte, v_Nom, v_IDF, v_LoginTVW ;
        Exit When C_PART%NOTFOUND ; /*sortie lorsque le curseur ne ramene plus de ligne*/
				v_enr := v_Compte || ';' || v_Nom || ';' || v_IDF || ';' || v_LoginTVW ;
				dbms_output.put_line(i);
				dbms_output.put_line(v_enr);
				utl_file.put_line(v_fichier, v_enr);
		 End loop ;
		 Close C_PART ; /*fermeture du curseur*/
		 utl_file.fclose(v_fichier);
EXCEPTION
  WHEN NO_DATA_FOUND THEN NULL;
  When UTL_FILE.INVALID_PATH Then
  	o_errm := c_repertoire || c_fichier || ' : ' || 'File location is invalid.';
  	RAISE_APPLICATION_ERROR( -20070, o_errm ) ;
  When UTL_FILE.INVALID_MODE Then
  	o_errm := c_repertoire || c_fichier || ' : ' || 'The open_mode parameter in FOPEN is invalid.';
  	RAISE_APPLICATION_ERROR( -20070, o_errm ) ;
  When UTL_FILE.INVALID_FILEHANDLE Then
  	o_errm := c_repertoire || c_fichier || ' : ' || 'File handle is invalid.';
  	RAISE_APPLICATION_ERROR( -20070, o_errm ) ;
  When UTL_FILE.INVALID_OPERATION	Then
  	o_errm := c_repertoire || c_fichier || ' : ' || 'File could not be opened or operated on as requested.';
  	RAISE_APPLICATION_ERROR( -20070, o_errm ) ;
  When UTL_FILE.READ_ERROR	Then
  	o_errm := c_repertoire || c_fichier || ' : ' || 'Operating system error occurred during the read operation.';
  	RAISE_APPLICATION_ERROR( -20070, o_errm ) ;
  When UTL_FILE.WRITE_ERROR Then
  	o_errm := c_repertoire || c_fichier || ' : ' || 'Operating system error occurred during the write operation.';
  	RAISE_APPLICATION_ERROR( -20070, o_errm ) ;
  When UTL_FILE.INTERNAL_ERROR then
  	o_errm := c_repertoire || c_fichier || ' : ' || 'Unspecified PL/SQL error';
  	RAISE_APPLICATION_ERROR( -20070, o_errm ) ;
  WHEN OTHERS THEN
     o_errn := SQLCODE;
     o_errm := SQLERRM;
     DBMS_OUTPUT.PUT_LINE('ERREUR pendant le traitement, No :' || o_errn);
     DBMS_OUTPUT.PUT_LINE('Description : '|| o_errm);
     utl_file.fclose(v_fichier);
     RAISE;
END ;
/
EXIT
EOF
L'extraction des données se passe bien et le traitement se déroule sans aucune erreur. Le problème c'est que le fichier n'est pas créé.
L'option utl_file_dir d'oracle est égale à /tmp .

Quelqu'un a t'il une idée car là je sèche complètement depuis un bon moment ...
stepd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 17h30   #2
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Bonjour,

2 questions :
- Quelle version d'oracle utilises tu ?
- As tu une erreur lorsque tu execute la fonction sous sqlplus et que tu fait un show error ?
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 17h41   #3
Futur Membre du Club
 
Inscription : juillet 2006
Messages : 55
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 55
Points : 17
Points : 17
version Oracle = Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production

show error = Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production
stepd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 17h42   #4
Futur Membre du Club
 
Inscription : juillet 2006
Messages : 55
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 55
Points : 17
Points : 17
désolé, pour le show error ==> No errors
stepd 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 18h25.


 
 
 
 
Partenaires

Hébergement Web