Re: sqlstate 02000 while declaring cursor/freeing prepared - Mailing list pgsql-sql

From andy rost
Subject Re: sqlstate 02000 while declaring cursor/freeing prepared
Date
Msg-id 4314BD2D.1040805@noaa.gov
Whole thread Raw
In response to Re: sqlstate 02000 while declaring cursor/freeing prepared  (Michael Fuhr <mike@fuhr.org>)
List pgsql-sql
Just so that we can snip this thread, we've confirmed that free cursor 
and free statement do not affect sqlca structure elements sqlcode and 
sqlstate.

Michael Fuhr wrote:
> On Mon, Aug 29, 2005 at 04:39:36PM -0500, andy rost wrote:
> 
>>I worked on my problem a little further and have a little more 
>>information to share. The declare statement that fails consistently 
>>follows a select statement that returns zero rows (and sqlcode 100 and 
>>sqlstate '02000'). If I ommit the select statement from the code or set 
>>sqlcode to 0 before calling the declare statement, the declare statement 
>>works fine.
>>
>>It appears as though the declare statement is not updating the sqlca 
>>structure. Is this by design for the ecpg options that I'm using? Did I 
>>pick up bad habits while using Informix?
> 
> 
> Apparently since PostgreSQL doesn't actually have an OPEN statement,
> the ECPG code generator doesn't issue the DECLARE until the code
> OPENs the cursor.  Observe:
> 
> % cat foo.pgc
> int
> main(void)
> {
>     EXEC SQL CONNECT TO DEFAULT;
> 
>     printf("before DECLARE\n");
>     EXEC SQL DECLARE curs CURSOR FOR SELECT 1;
>     printf("after DECLARE, before OPEN\n");
>     EXEC SQL OPEN curs;
>     printf("after OPEN\n");
> 
>     EXEC SQL CLOSE curs;
>     EXEC SQL DISCONNECT;
> 
>     return 0;
> }
> 
> % ecpg foo.pgc
> % cat foo.c
> ...
>     printf("before DECLARE\n");
>     /* declare curs  cursor  for select  1      */
> #line 7 "foo.pgc"
> 
>     printf("after DECLARE, before OPEN\n");
>     { ECPGdo(__LINE__, 0, 1, NULL, "declare curs  cursor  for select  1     ", ECPGt_EOIT, ECPGt_EORT);}
> #line 9 "foo.pgc"
> 
>     printf("after OPEN\n");
> ...
> 
> Notice that "after DECLARE" actually comes *before* the DECLARE
> statement is issued, so references to sqlcode and sqlstate would
> see values from a previous command.  I don't know if DECLARE is
> supposed to affect error codes or not; I'd have to consult the
> standard.
> 

-- 
--------------------------------------------------------------------------------
Andrew Rost
National Operational Hydrologic Remote Sensing Center (NOHRSC)
National Weather Service, NOAA
1735 Lake Dr. West, Chanhassen, MN 55317-8582
Voice: (952)361-6610 x 234
Fax: (952)361-6634
arost@nohrsc.nws.gov
http://www.nohrsc.nws.gov
--------------------------------------------------------------------------------




pgsql-sql by date:

Previous
From: Scott Marlowe
Date:
Subject: Re: booleans and nulls
Next
From: Michael Fuhr
Date:
Subject: Re: [ADMIN] plpgsql question