Hi,

I feel a little stupid - I suddenly remembered that I had asked about
this before and got a perfectly good answer:  Use ROWID instead of a
cursor.
    SELECT field, ROWID FROM table FOR UPDATE;
    loop: UPDATE table SET field=? WHERE ROWID=?;

That turned out to be the simplest solution for me, so I did
that.

Because...

Michael A Chase writes:
> You have to get the cursor name using the CursorName statement handle
> attribute ($csr->{CursorName}).  The DBI statement handle is not the
> statement name.  You will have to test to see if DBD::Oracle supports that
> attribute, I don't think it does yet.

Right.

> You might be able to get the cursor
> name using Oracle::OCI, but I have not used it so I don't know how.

I'd have to reinstall Oracle first.  Since Oracle is so bloated, we only
keep around a minimal installation, without e.g. Pro*C.

> You might also be able to force the name of the cursor using the alternate
> syntax mentioned in the fine manual (perldoc DBD::Oracle):
> 
>   $sth1 = $dbh->prepare(q{
>     CREATE OR REPLACE FUNCTION sp_ListEmp RETURN types.cursorType

Good idea, but I don't have privileges to create functions:-(
I suppose I could get them, but it was simpler to just use ROWID.

Thanks anyway.

-- 
Hallvard

Reply via email to