Hi, Commit bd7c95f0c1a38becffceb3ea7234d57167f6d4bf add DECLARE STATEMENT support to ECPG. This introduced the new rule for EXEC SQL CLOSE cur and with that it gets transformed into ECPGclose().
Now prior to the above commit, someone can declare the cursor in the SQL statement and "CLOSE cur_name" can be also, execute as a normal statement. Example: EXEC SQL PREPARE cur_query FROM "DECLARE cur1 CURSOR WITH HOLD FOR SELECT count(*) FROM pg_class"; EXEC SQL PREPARE fetch_stmt FROM "FETCH next FROM cur1"; EXEC SQL EXECUTE cur_query; EXEC SQL EXECUTE fetch_stmt INTO :c; EXEC SQL CLOSE cur1; With commit bd7c95f0c1, "EXEC SQL CLOSE cur1" will fail and throw an error "sqlcode -245 The cursor is invalid". I think the problem here is ECPGclose(), tries to find the cursor into "connection->cursor_stmts" and if it doesn't find it there, just throws an error. Maybe require fix into ECPGclose() - rather than throwing an error continue executing statement "CLOSE cur_name" with ecpg_do(). Attaching the ECPG program for reference. Thanks, -- Rushabh Lathia www.EnterpriseDB.com
test.pgc
Description: Binary data