Thank you Andrew,
I agree the example is a bit confusing, anyway it's my fault... problem fixed.
However, could you please confirm that I can use the same name for a prepared statement and a server cursor?
This seems to work:
test1=> declare s1 cursor with hold for select * from dbit2;
test1=> open s1;
test1=> prepare s1 as select * from dbit2; -- or PQprepare ( "s1" )
test1=> execute s1;
As these are different objects for PostgreSQL - right?
Seb
Andrew Dunstan wrote:
> Sebastien FLAESCH wrote:
>> For SQL producing a result set:
>>
>> PQprepare(... "cu1", "DECLARE cu1 CURSOR WITH HOLD ..." );
>> PQexecPrepared( ... "cu1" ... ); -- opens the cursor...
>> PQexec( "FETCH NEXT FROM cu1 ..." ... );
>> PQexec( "FETCH NEXT FROM cu1 ..." ... );
>> PQexec( "FETCH NEXT FROM cu1 ..." ... );
>> PQexec( "CLOSE cu1" ); -- frees cursor resources (need to re-execute
>> DECLARE)
>> PQexecPrepared( ... "cu1" ... ); -- opens the cursor...
>> PQexec( "FETCH NEXT FROM cu1 ..." ... );
>> PQexec( "FETCH NEXT FROM cu1 ..." ... );
>> PQexec( "CLOSE cu1" ); -- frees cursor resources (need to re-execute
>> DECLARE)
>> PQexecPrepared( ... "cu1" ... ); -- Here I get error:
>> [42P03][cursor "cu1" already exists]
>>
>> I wonder why the second PQexecPrepare() executes and the third fails...
>>
>> To make this work, I need to de-allocate the statement and re-prepare
>> with PQprepare() ...
>>
>> I will try to provide you with a little sample to reproduce, but
>> wanted to post this early to let you known.
>>
>
> This example would be clearer if you used different names for the cursor
> and the prepared statement.
>
> cheers
>
> andrew
>