Re: basic PL/SQL questions
Date: Tue, 06 Jan 2004 21:36:48 +0100
Message-ID: <btf5n0$apg$1_at_news4.tilbu1.nb.home.nl>
UNIXNewBie wrote:
> Please excuse the basic nature of these questions - I'm just starting off.
>
> This example is taken from Oracle PL/SQL 101 - Osborne/McGraw-Hill - ISBN
> 0-07-212606-X - page 314
>
> Numbers to the left are line numbers for reference only. Hopefully I haven't
> made any typing mistakes.
>
> 1. DECLARE
>
> 2. CURSOR product_cur IS
>
> 3. SELECT * FROM plsql101_product
>
> 4. FOR UPDATE OF product_price;
>
> 5. BEGIN
>
> 6. FOR product_rec IN product_cur
>
> 7. LOOP
>
> 8. UPDATE plsql101_product
>
> 9. SET product_price = (product_rec.product_price =
> 0.97)
>
> 10. WHERE CURRENT OF product_cur
>
> 11. END LOOP;
>
> 12. END;
>
> Am I correct to say the following?
>
> The way a cursor works is that once a record is fetched it is taken out of
> the cursor.
No, fetched is fetched - it "stays" until your fetch the next one.
This works well until the last record is reached at which time
> fetch will continue to return the last record in the cursor
No - just give it a try - oracle will generate an error
unless you use
> the %FOUND and %NOTFOUND constructs to test for the last record?
>
> The cursor loop used in the above example eliminates the need to open, close
> and fetch. It also eliminates the need to check for the last record.
>
It's there: for x IN y : as long as there's an x fetched, do...
> There is no formal declaration of the cursor name "product_rec" first used
> on line 6. Is this an example of an implicit cursor of table-based record
> type?
Ehhh - not sure about the semantics, but it sounds familiar. Undoubtedly
you'll get a concise, yes/no answer.
>
> On line 9 how does PL/SQL know that there is a product_price field in the
> cursor record? Is this also part of the implicit cursor definition?
>
You know, or need to know. As a programmer.
It is checked during compile, if the above is part of a procedure.
Inline...
-- Regards, Frank van BortelReceived on Tue Jan 06 2004 - 21:36:48 CET