Hi all,
I've been using ECPG, and I need to fetch the fields of a cursor into a
struct like this:
16 EXEC SQL BEGIN DECLARE SECTION;
17 struct TST_t {
18 char key[16];
19 double num;
20 } tst;
21 EXEC SQL END DECLARE SECTION;
When I use a FETCH statement like that on line 42
34 EXEC SQL DECLARE CTST_1 CURSOR FOR
35 SELECT KEY, NUM
36 FROM TABLE;
...
39
40 do
41 {
42 EXEC SQL FETCH CTST_1 INTO :tst.key, :tst.num;
ECPG generates this code, that compiles and runs correctly
138 { ECPGdo(__LINE__, NULL, "declare CTST_1 cursor for select KEY , NUM fr
om TABLE ", ECPGt_EOIT, ECPGt_EORT);
139 #line 37 "tstecpgC.ec"
...
145 do
146 {
147 { ECPGdo(__LINE__, NULL, "fetch CTST_1", ECPGt_EOIT,
148 ECPGt_char,(tst.key),16L,1L,16*sizeof(char),
149 ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
150 ECPGt_double,&(tst.num),1L,1L,sizeof(double),
151 ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
152 #line 41 "tstecpgC.ec"
However, when I use that FETCH statement on line 42
34 EXEC SQL DECLARE CTST_1 CURSOR FOR
35 SELECT KEY, NUM
36 FROM TABLE;
...
39
40 do
41 {
42 EXEC SQL FETCH CTST_1 INTO :tst;
ECPG generates the code below, that compiles correctly but, when ran,
receives this error:
SQLCODE = -200; Unsupported type double in line 41
138 { ECPGdo(__LINE__, NULL, "declare CTST_1 cursor for select KEY , NUM fr
om TABLE ", ECPGt_EOIT, ECPGt_EORT);
139 #line 37 "tstecpgC.ec"
...
145 do
146 {
147 { ECPGdo(__LINE__, NULL, "fetch CTST_1", ECPGt_EOIT,
148 ECPGt_char,(tst.key),16L,1L,16*sizeof(char),
149 ECPGt_double,&(tst.num),1L,1L,sizeof(double), ECPGt_EORT);
150 #line 41 "tstecpgC.ec"
Please, is there a way to fetch the fields of a cursor into a struct
without citing
each member individually? I looked up in the documentation and in the
file preproc.y
but couldn't figure it out.
I'm running PostgreSQL 7.1.2, on Linux 2.2.16, compiled with options:
--prefix=/usr/local/pgsql --enable-locale --enable-multibyte
Regards,
Antonio Sergio