Ada beberapa masalah:
- Anda memerlukan titik koma setelah definisi kursor (yaitu, setelah kueri).
- Anda tidak dapat menggunakan
bookCursor
baik sebagai nama kursor dan sebagai nama catatan yang Anda ambil. (Saya perhatikan bahwa sedikit kode Anda menggunakanbookCursorRec
untuk yang terakhir, jadi saya akan melakukannya.) fetch
perlu mengambil ke sesuatu, yaitu, ke dalambookCursorRec
.- Anda memerlukan titik koma setelah panggilan ke
dbms_output.put_line
. - Kueri Anda sepertinya salah; sepertinya kedua gabungan adalah gabungan silang.
Menyatukannya, dan menyesuaikan pemformatan dan struktur sedikit sehingga sedikit lebih "idiomatik" 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;
/
Omong-omong, pengidentifikasi Oracle sebagian besar peka huruf besar-kecil (karena secara implisit dikonversi menjadi huruf besar kecuali Anda membungkusnya dengan tanda kutip ganda), jadi biasanya orang akan menggunakan pengidentifikasi seperti book_cursor_rec
dan date_destroyed
daripada bookCursorRec
(=bookcursorrec
) dan dateDestroyed
(=datedestroyed
).