Plsql 错误-ORA-01422:精确提取返回的行数超过请求的行数
我正在尝试执行以下过程,但不断得到以下结果: 代码:Plsql 错误-ORA-01422:精确提取返回的行数超过请求的行数,plsql,Plsql,我正在尝试执行以下过程,但不断得到以下结果: 代码: SET SERVEROUTPUT ON DECLARE aID VARCHAR2(4):= '&AuthID'; aName BK_AUTHOR.FNAME%TYPE; aSurname BK_AUTHOR.LNAME%TYPE; bTit BK_BOOKS.TITLE%TYPE; bCat BK_BOOKS.CATEGORY%TYPE; bPrice BK_COSTS.COST%TYPE; BEGIN b
SET SERVEROUTPUT ON
DECLARE
aID VARCHAR2(4):= '&AuthID';
aName BK_AUTHOR.FNAME%TYPE;
aSurname BK_AUTHOR.LNAME%TYPE;
bTit BK_BOOKS.TITLE%TYPE;
bCat BK_BOOKS.CATEGORY%TYPE;
bPrice BK_COSTS.COST%TYPE;
BEGIN
book_info(aID,aName,aSurname,bTit,bCat,bPrice);
DBMS_OUTPUT.PUT_LINE(aName||'-'||aSurname||'wrote the book ('||bTit||') that is in category '||bCat||' and it cost R'||TO_CHAR(bPrice,'99999.99'));
END;
/
错误
ERROR at line 1:
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at "SYS.BOOK_INFO", line 13
ORA-06512: at line 9
从注释中添加代码:
CREATE OR REPLACE PROCEDURE book_info(
AuthID IN OUT VARCHAR2,
Name OUT BK_AUTHOR.FNAME%TYPE,
Surname OUT BK_AUTHOR.LNAME%TYPE,
Tit OUT BK_BOOKS.TITLE%TYPE,
Cat OUT BK_BOOKS.CATEGORY%TYPE,
Price OUT BK_COSTS.COST%TYPE )
IS
BEGIN
SELECT FNAME,
LNAME,
TITLE,
CATEGORY,
COST
INTO Name,
Surname,
Tit,
Cat,
Price
FROM BK_BOOKS,
BK_AUTHOR,
BK_COSTS
WHERE BK_COSTS.ISBN = BK_BOOKS.ISBN
AND BK_BOOKS.AUTHORID = AuthID;
END book_info;
/
可能是由于查看book_信息代码的多个原因 首先,bk_图书和bk_作者之间存在交叉连接。您需要在这两个表之间添加连接条件,例如-
WHERE BK_COSTS.ISBN = BK_BOOKS.ISBN AND bk_books.authorid = bk_author.authorid AND AND BK_BOOKS.AUTHORID = AuthID
您还应该基于Authorid检查这些表的结果联接中是否存在重复项
编辑:忘记提及,请不要将SYS用户用于任何与开发相关的活动,如创建过程或函数。从错误消息来看,book_info过程似乎位于SYS user内部。除非您是DBA并将其用于与sysdba相关的活动,否则不应登录此用户。功能手册信息是什么样子的?您是否有可能在SYS模式中编写这些过程?您需要将代码发布到book_info。您可能正在执行select…into操作,select返回的行数超过1行。以下是过程:创建或替换过程手册\u信息(AuthID IN OUT varchar2,Name OUT BK_AUTHOR.FNAME%TYPE,姓氏OUT BK_AUTHOR.LNAME%TYPE,Tit OUT BK_BOOKS.TITLE%TYPE,Cat OUT BK_BOOKS.CATEGORY%TYPE,Price OUT BK_COSTS.COST%TYPE)开始选择FNAME,LNAME,TITLE,CATEGORY,COST到Name,姓氏,Tit,Cat,Price FROM BK_BOOKS,BK_AUTHOR,BK_COSTS,其中BK_COSTS.ISBN=BK_BOOKS.ISBN和BK_BOOKS.authord=AuthID;END book_info;/结构。您的SQL需要在bk_书籍、bk_作者和bk_成本之间进行联接。避免错误的唯一方法是只返回一行,因此您需要适当联接。