Обсуждение: ecpg did not precompile declare cursor

Поиск
Список
Период
Сортировка

ecpg did not precompile declare cursor

От
Bernhard Rückerl
Дата:
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.

best regards
Bernhard Rueckerl

_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com

ecpg did not precompile declare cursor

От
Lee Kindness
Дата:
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.