Er zijn een paar problemen:
- Je hebt een puntkomma nodig na de cursordefinitie (d.w.z. na de zoekopdracht).
- U kunt
bookCursor
niet gebruiken zowel als de naam van de cursor en als de naam van het record dat u ophaalt. (Ik merk dat een deel van je code gebruikmaakt vanbookCursorRec
voor het laatste, dus daar ga ik mee akkoord.) - Het
fetch
moet in . ophalen iets, dat wil zeggen, inbookCursorRec
. - Je hebt een puntkomma nodig na de aanroep van
dbms_output.put_line
. - Uw zoekopdracht lijkt verkeerd; het lijkt erop dat beide joins cross-joins zijn.
Het in elkaar zetten en de opmaak en structuur een beetje aanpassen zodat het iets "idiomatischer" is PL/SQL:
DECLARE
CURSOR bookcursor IS
SELECT btname, isbn, pubname, datedestroyed
FROM booktitle bt
JOIN publisher p
ON bt.pid = p.id -- this is just a guess
JOIN bookcopy bc
ON bt.bcid = bc.id -- this is just a guess
WHERE datedestroyed IS NULL
;
bookcursorrec bookcursor%ROWTYPE;
BEGIN
OPEN bookcursor;
LOOP
FETCH bookcursor INTO bookcursorrec;
EXIT WHEN bookcursor%NOTFOUND;
dbms_output.put_line( 'ISBN: ' ||bookcursorrec.isbn
|| ' - Book Name: ' || bookcursorrec.btname
|| ' - Publisher: ' || bookcursorrec.pubname );
END LOOP;
CLOSE bookcursor;
END;
/
Trouwens, Oracle-ID's zijn meestal hoofdlettergevoelig (in die zin dat ze impliciet worden omgezet in hoofdletters, tenzij je ze tussen dubbele aanhalingstekens plaatst), dus meestal gebruiken mensen ID's zoals book_cursor_rec
en date_destroyed
in plaats van bookCursorRec
(=bookcursorrec
) en dateDestroyed
(=datedestroyed
).