いくつかの問題があります:
- カーソル定義の後(つまり、クエリの後)にセミコロンが必要です。
-
bookCursor
は使用できません カーソルの名前としても、フェッチするレコードの名前としても。 (コードの一部でbookCursorRec
が使用されていることに気付きました 後者の場合は、それを使用します。) 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
。