Bonjour à tous,

je travaille dans un environnement C++ && oracle ... jusque la ca va

mon probleme : lorsque je lance la compilation, j'ai un precompilateur qui prend du code pc et le passe en c++ ( si j'aibien compris ).
Le code pc est essentiellement des procedures stockées que je retrouve dnas ma base oracle : et la !!! j'ai des problemes de correspondance de type entre mon code pc et ma base.

Voici le code cote base :
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
 
 
  PROCEDURE t276_p02(
  filtre IN VARCHAR2 ,
  TabCrit IN OUT cpd_mtc.TabNumCpd_Mtc,
  TabObjet IN OUT cpd_mtc.Tab3Cpd_Mtc,
  TabOrdreCrit IN OUT cpd_mtc.TabNumCpd_Mtc,
  TabOrdreObjet IN OUT cpd_mtc.TabNumCpd_Mtc,
  NbElem IN OUT NUMBER ,
  codeErr IN OUT NUMBER ,
  critErr IN OUT VARCHAR2 )
 
 
avec 
 
  TYPE Tab3Cpd_Mtc IS TABLE OF
  VARCHAR2(3) NOT NULL
  INDEX BY BINARY_INTEGER;
 
  TYPE TabNumCpd_Mtc IS TABLE OF
  NUMBER(10) NOT NULL
  INDEX BY BINARY_INTEGER;

et mon code pc :
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
 
fichier .h
class CCpd_mtc_t276_p02
:public CExecuteOracle
{
public:
	CCpd_mtc_t276_p02(const char * libelle);
 
protected:
	// entrée
	//char _libelle[500];
	char* _libelle;
 
public:
	virtual void initialize();
	int _nbElemTab;
	int _tabOrdreCrit[100];
	int _tabOrdreObjet[100];
	int _codeErr;
	char _critErr[40];
	int _tabCrit[100];
 
	//int _tabObjet[100];
	char* _tabObjet[100];
 
	virtual const char * className(){return "CCpd_mtc_t276_p02";}
 
};
 
 
fichier .pc
 
 
void CCpd_mtc_t276_p02::initialize()
{
	EXEC SQL BEGIN DECLARE SECTION;
 
	// entrée
 
	char * LIBELLE; 
	short ind_LIBELLE;
	//varchar LIBELLE[500];
 
	// sorties
 
	int TABCRIT[100];
	short ind_TABCRIT[100];
 
 
	//int TABOBJET[100];
	char* TABOBJET[100];
	short ind_TABOBJET[100];
 
 
	int NBELEMTAB;
	short ind_NBELEMTAB ;
 
	int TABORDRECRIT[100];
	short ind_TABORDRECRIT[100];
 
	int TABORDREOBJET[100];
	short ind_TABORDREOBJET[100];
 
	int CODEERR;
	short ind_CODEERR;
 
	varchar CRITERR[40];
	short ind_CRITERR;
 
	EXEC SQL END DECLARE SECTION;
 
	// init des entrées 
	strcpy((char *)LIBELLE.arr , _libelle);// entrée
	LIBELLE.len = strlen(_libelle);
	// init des sorties
 
	ind_LIBELLE = 0;
	ind_NBELEMTAB = 0;
	ind_CODEERR = 0;
	ind_CRITERR= 0;
 
	memset(ind_TABCRIT,0,100*sizeof(short));
	memset(ind_TABOBJET,0,100*sizeof(short));
	memset(ind_TABORDRECRIT,0,100*sizeof(short));
	memset(ind_TABORDREOBJET,0,100*sizeof(short));
 
	NBELEMTAB = 0;
	CODEERR = 0;
	CRITERR.len =0;
	CRITERR.arr[0] = 0;
	// réponse
	EXEC SQL EXECUTE 
		BEGIN  cpd_mtc.t276_p02(:LIBELLE INDICATOR :ind_LIBELLE
		, :TABCRIT  INDICATOR :ind_TABCRIT
		, :TABOBJET  INDICATOR :ind_TABOBJET
		, :TABORDRECRIT  INDICATOR :ind_TABORDRECRIT
		, :TABORDREOBJET  INDICATOR :ind_TABORDREOBJET
		, :NBELEMTAB  INDICATOR :ind_NBELEMTAB
		, :CODEERR  INDICATOR :ind_CODEERR
		, :CRITERR  INDICATOR :ind_CRITERR); END;
	END-EXEC;

et le message d'erreur a la compilation :

Error at line 3202, column 10 in file .\src_proc\bdb.pc
BEGIN cpd_mtc.t276_p02(:LIBELLE INDICATOR :ind_LIBELLE
.........1
PLS-S-00306, Message 306 not found; No message file for product=plsql, facility=
PCM
Error at line 3202, column 10 in file .\src_proc\bdb.pc
BEGIN cpd_mtc.t276_p02(:LIBELLE INDICATOR :ind_LIBELLE
.........1
PLS-S-00000, Statement ignored
Semantic error at line 3202, column 3, file .\src_proc\bdb.pc:
BEGIN cpd_mtc.t276_p02(:LIBELLE INDICATOR :ind_LIBELLE
..1
PCC-S-02346, PL/SQL found semantic errors
voila donc d'apres ce que je comprend le type libelle ne correspond pas entre le pc et la base ...
idem pour tabObjet .....

mais quel type dois je mettre pour correspondre avec ma base ?? ..... si c'est bien cela le pb

Merci d'avance ++