Der er et par problemer:
- Du skal bruge et semikolon efter markørdefinitionen (dvs. efter forespørgslen).
- Du kan ikke bruge
bookCursor
både som navnet på markøren og som navnet på den post, du henter. (Jeg bemærker, at en del af din kode brugerbookCursorRec
for sidstnævnte, så det går jeg med.) fetch
skal hente ind noget, det vil sige ibookCursorRec
.- Du skal bruge et semikolon efter opkaldet til
dbms_output.put_line
. - Din forespørgsel virker forkert; det ser ud til, at begge sammenføjninger er krydsforbindelser.
At sætte det sammen, og justere formateringen og strukturen lidt, så det er lidt mere "idiomatisk" 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;
/
I øvrigt er Oracle identifikatorer for det meste store og små bogstaver (ved at de implicit konverteres til store bogstaver, medmindre du pakker dem ind i dobbelte anførselstegn), så normalt vil folk bruge identifikatorer som book_cursor_rec
og date_destroyed
i stedet for bookCursorRec
(=bookcursorrec
) og dateDestroyed
(=datedestroyed
).