Jarmo Paavilainen wrote:
Hi,
Ive a SELECT cursor which I want to update/delete but postgresql does not
support these:
UPDATE myTable SET myColumn = 'myValue' WHERE CURRENT OF myCursor
DELETE myTable WHERE CURRENT OF myCursor
PostgreSQL does not have the concept of updateable cursors.
And that isn't planned either.
Does there exist any workaround?
Or is my syntax wrong?
One workaround would be to get the row id and to be able to update it.
Something like this:
... a row is selected and fetched ...
int i = GetRowId( ); // C function that reads a unique row id.
ExecuteSQL( "UPDATE myTable SET myColumn = 'myValue' WHERE @ROWID = %d",
i );
ExecuteSQL( "DELETE myTable WHERE @ROWID = %d", i );
// ExecuteSQL(...) is a C function that parses and executes the string.
Right. That'd work and the row ID you're looking for is it's
OID. Up to now, all tables have a system attribute OID, that
you can explicitly SELECT for such a purpose. Don't forget to
create an INDEX on the OID if you go and do
UPDATE yourTable SET yourColumn = 'yourValue'
WHERE oid = oid_of_yourRow;
Also don't forget that in a concurrent environment you
probably want to SELECT ... FOR UPDATE the rows in the first
place.
// Jarmo
PS. I hope Im sending this mail to the right address, if not Im sorry DS.
pgsql-sql would've been.
Jan
--
#==#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me. #
#== [EMAIL PROTECTED] #