Bri*_*ian 1 sql oracle plsql cursor oracle11g
我正在尝试在Oracle 11g上运行此代码,它在下面给出了错误.我似乎无法做对.
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
Run Code Online (Sandbox Code Playgroud)
你能帮我指出什么是错的吗?我似乎无法理解什么是错的
谢谢,Brian
有一些问题:
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;
/
Run Code Online (Sandbox Code Playgroud)
顺便说一句,甲骨文标识符大多是区分大小写(因为他们是隐式转换为大写,除非你在双引号包起来),所以通常人们会用标识符像book_cursor_rec和date_destroyed,而不是bookCursorRec(= bookcursorrec)和dateDestroyed(= datedestroyed).
| 归档时间: |
|
| 查看次数: |
21227 次 |
| 最近记录: |