कुछ समस्याएं हैं:
- आपको कर्सर की परिभाषा के बाद एक अर्धविराम की आवश्यकता है (अर्थात, क्वेरी के बाद)।
- आप
bookCursor
का उपयोग नहीं कर सकते हैं दोनों कर्सर के नाम के रूप में और आपके द्वारा लाए गए रिकॉर्ड के नाम के रूप में। (मैंने देखा है कि आपका थोड़ा सा कोडbookCursorRec
. का उपयोग करता है बाद के लिए, तो मैं उसके साथ जाऊंगा।) - द
fetch
में fetch लाने की जरूरत है कुछ, यानीbookCursorRec
. में । dbms_output.put_line
पर कॉल करने के बाद आपको एक अर्धविराम चाहिए ।- आपकी क्वेरी गलत लगती है; ऐसा लगता है कि दोनों जॉइन क्रॉस-जॉइन हैं।
इसे एक साथ रखना, और स्वरूपण और संरचना को थोड़ा समायोजित करना ताकि यह थोड़ा अधिक "मुहावरेदार" 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;
/
वैसे, Oracle पहचानकर्ता अधिकतर केस-संवेदी होते हैं (जब तक कि आप उन्हें डबल-कोट्स में लपेटते नहीं हैं, तब तक वे अपरकेस में परिवर्तित हो जाते हैं), इसलिए आमतौर पर लोग book_cursor_rec
जैसे पहचानकर्ताओं का उपयोग करेंगे। और date_destroyed
के बजाय bookCursorRec
(=bookcursorrec
) और dateDestroyed
(=datedestroyed
)।