Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion Groups
Database Servers
DB2InformixIngresMS SQLOraclePervasive.SQLPostgreSQLProgressSybase
Desktop Databases
FileMakerFoxProMS AccessParadox
General
General DB TopicsDatabase Theory
Related Topics
Java Development.NET DevelopmentVB DevelopmentMore Topics ...

Database Forum / Oracle / Oracle Server / April 2008

Tip: Looking for answers? Try searching our database.

How to avoid PLS-00413 when using cursorType

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Martin - 30 Apr 2008 17:05 GMT
Hi,

I have the following cut down pls/sql:

cur_entries cursorType;

IF condition
  open cur_entries for
    SELECT a from test_table1 for update of b;
ELSE
  open cur_entries for
    SELECT a from test_table2 for update of b;
END IF;

LOOP
 FETCH cur_entries INTO var;
 EXIT WHEN cur_entries%NOTFOUND;

 IF condition
   -- a lot of pl/sql here
   update test_table1 set b = 1 where current of cur_entries;
 ELSE
   -- a lot of pl/sql here
   update test_table2 set b = 1 where current of cur_entries;
 END IF;
END LOOP;
and I am getting "PLS-00413: identifier in CURRENT OF clause is not a
cursor name".

I don't quite understand this as I thought "cur_entries" was a cursor
but I guess as it is defined as cursorType Oracle does not like it. Is
there any way for me to avoid this without replicating all the code
with two explicitly named cursors? All the code in the procedure is
identical for both cursors other than the fetch and update.

Thanks.
Maxim Demenko - 30 Apr 2008 19:34 GMT
Martin schrieb:
> Hi,
>
[quoted text clipped - 32 lines]
>
> Thanks.

The "current of"  clause does apply only to cursors, not to cursor
varibales which you are using.

Best regards

Maxim
Martin - 30 Apr 2008 20:46 GMT
> Martin schrieb:
>
[quoted text clipped - 41 lines]
>
> Maxim

Thanks.

Do you know if it works with reference cursors? Both the tables in
question contain exactly the same columns so it would be possible for
me to create a record type of those columns.

Martin
sybrandb@hccnet.nl - 30 Apr 2008 21:49 GMT
>> Martin schrieb:
>>
[quoted text clipped - 49 lines]
>
>Martin

What you currently use is a strongl-typed ref cursor, as opposed to a
weakly-typed ref cursor, you seem to label as a ref cursor per se.
So, no, it doesn't work with ref cursors,
it only works with
cursor ... is
select ...
etc.
in the declararation section.
You can pass a CURSOR as a parameter to a procedure,
the other way out is to explicitly select the rowid and refer to the
rowid in the where clause. current of is shorthand for rowid=....

Signature

Sybrand Bakker
Senior Oracle DBA

 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2010 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.