Có một số vấn đề:
- Bạn cần dấu chấm phẩy sau định nghĩa con trỏ (tức là sau truy vấn).
- Bạn không thể sử dụng
bookCursor
vừa là tên của con trỏ vừa là tên của bản ghi mà bạn tìm nạp. (Tôi nhận thấy rằng một đoạn mã của bạn sử dụngbookCursorRec
cho phần sau, vì vậy tôi sẽ tiếp tục với điều đó.) -
fetch
cần tìm nạp vào cái gì đó, tức là, vàobookCursorRec
. - Bạn cần dấu chấm phẩy sau lệnh gọi đến
dbms_output.put_line
. - Truy vấn của bạn có vẻ sai; có vẻ như cả hai liên kết đều là liên kết chéo.
Kết hợp nó lại với nhau và điều chỉnh định dạng và cấu trúc một chút để PL / SQL "thành ngữ" hơn một chút:
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;
/
Nhân tiện, các số nhận dạng Oracle chủ yếu phân biệt chữ hoa chữ thường (theo đó chúng được chuyển đổi hoàn toàn thành chữ hoa trừ khi bạn đặt chúng trong dấu ngoặc kép), vì vậy thông thường mọi người sẽ sử dụng các số nhận dạng như book_cursor_rec
và date_destroyed
chứ không phải là bookCursorRec
(=bookcursorrec
) và dateDestroyed
(=datedestroyed
).