This is expected behaviour, the 'real' code gets emitted when you OPEN
the cursor, i.e. you should be doing something like:
EXEC SQL DECLARE demo_cur CURSOR FOR
SELECT field1, field2
FROM test;
EXEC SQL OPEN demo_cur;
if( sqlca.sqlcode != 0 )
{
some_error();
return;
}
while( 1 )
{
EXEC SQL FETCH demo_cur INTO :field1, :field2;
if( sqlca.sqlcode < 0 )
{
some_error();
break;
}
else if( sqlca.sqlcode != 0 ) /* or == 100... */
break;
process_row();
}
EXEC SQL CLOSE demo_cur;
Bernhard Rückerl writes:
> Hello,
>
> I have downloaded postgresql 7.2 on my machine.
> Running ecpg on my .ec-file I found that ecpg did not process
> the statements "exec sql declare xxx cursor for select.
>
> The part in my .ec-file:
> if ( firstcall )
> {
> calid1 = calid;
> EXEC SQL DECLARE CURMFDPOINT CURSOR FOR SELECT STABLE_OR_INSTABLE ,
> HIERARCHY , POINT_ID , X1 , P1 , X2 , P2 FROM MANIFOLD_POINTS WHERE
> CAL_ID = :calid1;
> raiseerror( );
> firstcall = false;
> }
>
> was transformed into
> if ( firstcall )
> {
> calid1 = calid;
> /* declare CURMFDPOINT cursor for select STABLE_OR_INSTABLE , HIERARCHY , POINT_ID , X1 , P1 , X2 , P2
fromMANIFOLD_POINTS where CAL_ID = ? */
> #line 224 "dbcontrol.ec"
>
> raiseerror( );
> firstcall = false;
> }
> So the declare cursor statement was just commented out. As a consequence the
> programm terminated with sqlca.sqlcode=-602 when doing the according
> fetch statement.