pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: andy rost <andy.rost@noaa.gov>
To: Michael Fuhr <mike@fuhr.org>
Cc: pgsql-sql@postgresql.org
Subject: Re: sqlstate 02000 while declaring cursor/freeing prepared
Date: Tue, 30 Aug 2005 15:10:21 -0500
Message-ID: <4314BD2D.1040805@noaa.gov> (raw)
In-Reply-To: <20050829231037.GA8406@winnie.fuhr.org>
References: <431361D8.8050900@noaa.gov>
	<20050829200935.GA98664@winnie.fuhr.org>
	<43137572.4090107@noaa.gov>
	<43138098.40201@noaa.gov>
	<20050829231037.GA8406@winnie.fuhr.org>

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





view thread (6+ messages)

Message-ID: <4314BD2D.1040805@noaa.gov>
Permalink:  ../4314BD2D.1040805@noaa.gov/
Also on:    postgresql.org/message-id/4314BD2D.1040805@noaa.gov

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: andy.rost@noaa.gov, mike@fuhr.org
  Subject: Re: sqlstate 02000 while declaring cursor/freeing prepared
  In-Reply-To: <4314BD2D.1040805@noaa.gov>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox