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 :
voila donc d'apres ce que je comprend le type libelle ne correspond pas entre le pc et la base ...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
idem pour tabObjet .....
mais quel type dois je mettre pour correspondre avec ma base ?? ..... si c'est bien cela le pb
Merci d'avance ++
Partager