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
--------------------------------------------------------------------------------