引发的行数过多,但只选择了一行



我有这个过程,它只是根据名为AppID的列字段删除一行。此过程根据该行AppID列从名为AppNbr的另一列获取值。该过程在尝试SELECT行时失败并出现TOO_MANY_ROWS异常。这是PL/SQL:

DECLARE
lvnApplNbr NUMBER;
PROCEDURE deleteAppl(applId IN VARCHAR2) IS
BEGIN
BEGIN
SELECT ApplNbr -- Exception thrown here
INTO lvnApplNbr
FROM Appl
WHERE ApplID = applId;
EXCEPTION
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
-- ... Delete it after some logic
END; -- End Procedure
BEGIN
...
deleteAppl('571E00BA-70E6-4523-BEAC-4568C3DD1A7D');
...
END;

TOO_MANY_ROWS异常在SELECT INTOs 时引发。我不知道为什么它会抛出该错误,因为如果我只是查询这个:

SELECT ApplNbr FROM Appl WHERE ApplId = '571E00BA-70E6-4523-BEAC-4568C3DD1A7D';

只有一行会返回正确的ApplId

这是怎么回事?

只需为相关表使用别名 (Appl(:

PROCEDURE deleteAppl(applId IN VARCHAR2) IS
.....
.....
SELECT ApplNbr 
INTO lvnApplNbr
FROM Appl a
WHERE a.ApplID = applId;
......

或将参数的名称 (applId( 更改为其他名称,例如i_applId

PROCEDURE deleteAppl(i_applId IN VARCHAR2) IS
.....
.....
SELECT ApplNbr 
INTO lvnApplNbr
FROM Appl
WHERE ApplID = i_applId;
......

因为在你的情况下,如果你的parameter's namecolumn name相同,就会感知到多个匹配。

相关内容

  • 没有找到相关文章

最新更新