I’m trying to run this code on Oracle 11g and it’s giving me the error below. I can’t seem to get it right.
DECLARE
CURSOR bookcursor IS
SELECT btName, BookCopy.Isbn, pubName, dateDestroyed
FROM booktitle bt
JOIN publisher p
ON bt.pubId = p.pubId
JOIN bookcopy bc
ON bt.Isbn = bc.Isbn
WHERE datedestroyed IS NULL
;
bookcursorrec bookcursor%ROWTYPE;
BEGIN
OPEN bookcursor;
LOOP
FETCH bookcursor INTO bookcursorrer;
EXIT WHEN bookcursor%NOTFOUND;
dbms_output.put_line( 'ISBN: ' ||bookcursorrec.isbn
|| ' - Book Name: ' || bookcursorrec.btname
|| ' - Publisher: ' || bookcursorrec.pubname );
END LOOP;
CLOSE bookcursor;
END;
ERROR at line 3:
ORA-06550: line 3, column 20:
PL/SQL: ORA-00904: "BOOKCOPY"."ISBN": invalid identifier
ORA-06550: line 3, column 5:
PL/SQL: SQL Statement ignored
ORA-06550: line 2, column 12:
PLS-00341: declaration of cursor 'BOOKCURSOR' is incomplete or malformed
ORA-06550: line 11, column 19:
PL/SQL: Item ignored
ORA-06550: line 15, column 31:
PLS-00201: identifier 'BOOKCURSORRER' must be declared
ORA-06550: line 15, column 9:
PL/SQL: SQL Statement ignored
ORA-06550: line 17, column 42:
PLS-00320: the declaration of the type of this expression is incomplete or
malformed
ORA-06550: line 17, column 9:
PL/SQL: Statement ignored
Can you kindly point me to what is wrong? I can’t seem to understand to what is wrong
Thanks,
Brian
There are a few problems:
bookCursorboth as the name of the cursor and as the name of the record you fetch. (I notice that a bit of your code usesbookCursorRecfor the latter, so I’ll go with that.)fetchneeds to fetch into something, that is, intobookCursorRec.dbms_output.put_line.Putting it together, and adjusting the formatting and structure a bit so it’s slightly more “idiomatic” PL/SQL:
By the way, Oracle identifiers are mostly case-sensitive (in that they’re implicitly converted to uppercase unless you wrap them in double-quotes), so usually people will use identifiers like
book_cursor_recanddate_destroyedrather thanbookCursorRec(=bookcursorrec) anddateDestroyed(=datedestroyed).