bonjour,
je ne comprend pas pourquoi ma procedure ne ramene qu'une suele colonne(bank_id) dans le fichier d'extraction, alors que je veux extraire 2 colonnes(bank_id et bankname) .
y a til qlq'un qui peut m'aider à trouver le bug?
voici le code:
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
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
104
105
 
CREATE OR REPLACE PROCEDURE my_extract
	(
		PC$Table      in Varchar2,                      -- Nom de la table a extraire
		PC$Fichier    in Varchar2,                      -- Nom du fichier de sortie
		PC$Repertoire in Varchar2,                      -- Nom du directory de sortie
		PC$Separateur in Varchar2 Default ';',          -- Caractere de separation
		PC$DateFMT    in Varchar2 Default 'DD/MM/YYYY' -- Format des dates		
	) IS
 
 
LF$Fichier  UTL_FILE.FILE_TYPE ;
LC$Ligne    Varchar2(32767) ;
LI$I        Integer ;
LC$DateFMT  Varchar2(40) := '''' || PC$DateFMT || '''' ;
TYPE REFCUR1 IS REF CURSOR ;
cur		REFCUR1;
-- Colonnes de la table --
  CURSOR C_COLTAB(PC$Tab in VARCHAR2)  IS
 
  SELECT
  	COLUMN_NAME,
	DATA_TYPE
  FROM
  	USER_TAB_COLUMNS
  WHERE
  	TABLE_NAME = PC$Tab
  AND
  	DATA_TYPE IN ('NUMBER','VARCHAR2');
LC$Separateur	Varchar2(2) := PC$Separateur ;
LC$Requete	Varchar2(10000) ;
LC$Desc		Varchar2(10000) ;
LC$SQLW		VARCHAR2(10000):= 'SELECT ';
--pc$col		VARCHAR2(256) ;
 
TYPE TYP_VAR_TAB is VARRAY(2) of VARCHAR(10);
pc$col TYP_VAR_TAB := TYP_VAR_TAB('BANK_ID','BANKNAME');
-----------------------------------------
-- Ouverture d'un fichier d'extraction --
-----------------------------------------
FUNCTION Ouvrir_fichier
	(
		PC$Dir in Varchar2,
		PC$Nom_Fichier in Varchar2
	) RETURN UTL_FILE.FILE_TYPE
IS
  Fichier	UTL_FILE.FILE_TYPE ;
  LC$Msg	Varchar2(256);
Begin
  Fichier := UTL_FILE.FOPEN( PC$Dir, PC$Nom_Fichier, 'W', 32764 ) ;
  If not UTL_FILE.IS_OPEN( Fichier ) Then
	LC$Msg := 'Erreur ouverture du fichier (' || PC$Dir || ') ' || PC$Nom_Fichier ;
  	RAISE_APPLICATION_ERROR( -20100, LC$Msg ) ;
  End if ;
  Return( Fichier ) ;
Exception
When UTL_FILE.INVALID_PATH Then
	LC$Msg := PC$Dir || PC$Nom_Fichier || ' : ' || 'File location is invalid.';
	RAISE_APPLICATION_ERROR( -20070, LC$Msg ) ;
When UTL_FILE.INVALID_MODE Then
	LC$Msg := PC$Dir || PC$Nom_Fichier || ' : ' || 'The open_mode parameter in FOPEN is invalid.';
	RAISE_APPLICATION_ERROR( -20070, LC$Msg ) ;
When UTL_FILE.INVALID_FILEHANDLE Then
	LC$Msg := PC$Dir || PC$Nom_Fichier || ' : ' || 'File handle is invalid.';
	RAISE_APPLICATION_ERROR( -20070, LC$Msg ) ;
When UTL_FILE.INVALID_OPERATION	Then
	LC$Msg := PC$Dir || PC$Nom_Fichier || ' : ' || 'File could not be opened or operated on as requested.';
	RAISE_APPLICATION_ERROR( -20070, LC$Msg ) ;
When UTL_FILE.READ_ERROR	Then
	LC$Msg := PC$Dir || PC$Nom_Fichier || ' : ' || 'Operating system error occurred during the read operation.';
	RAISE_APPLICATION_ERROR( -20070, LC$Msg ) ;
When UTL_FILE.WRITE_ERROR Then
	LC$Msg := PC$Dir || PC$Nom_Fichier || ' : ' || 'Operating system error occurred during the write operation.';
	RAISE_APPLICATION_ERROR( -20070, LC$Msg ) ;
When UTL_FILE.INTERNAL_ERROR then
	LC$Msg := PC$Dir || PC$Nom_Fichier || ' : ' || 'Unspecified PL/SQL error';
	RAISE_APPLICATION_ERROR( -20070, LC$Msg ) ;
 
When others Then
	LC$Msg := 'Erreur : ' || To_char( SQLCODE ) || ' sur ouverture du fichier ('
	   || PC$Dir || ') ' || PC$Nom_Fichier ;
	RAISE_APPLICATION_ERROR( -20070, LC$Msg ) ;
End Ouvrir_fichier ;
Begin
  -- Ouverture du fichier --
  LF$Fichier := Ouvrir_fichier( PC$Repertoire, PC$Fichier ) ; 
  -- Construction de la requete -- 
  LC$Requete := LC$SQLW  ||pc$col(1)||','|| pc$col(2) ||'      from '||  PC$table;
 
  F_TRACE( LC$Requete, 'T' ) ;
  -- Extraction des lignes --
  Open cur For LC$Requete ;
  Loop
	Fetch cur Into LC$Ligne ;
	Exit when cur%NOTFOUND ;
 
	  UTL_FILE.PUT_LINE( LF$Fichier, LC$Ligne ) ;
	--End if ;
  End loop ;
  Close cur;
  -- Fermeture fichier --
  UTL_FILE.FCLOSE( LF$Fichier ) ;
 
End ;
/