Jim*_*mex 2 sql oracle plsql stored-procedures ora-01422
我有这个过程,它只是根据一个被调用的列字段删除一行AppID.此过程从另一个AppNbr基于该行列调用的列获取值AppID.TOO_MANY_ROWS尝试SELECT连续时,该过程失败并出现异常.这是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;
Run Code Online (Sandbox Code Playgroud)
在TOO_MANY_ROWS当异常被抛出SELECT INTO秒.我不知道为什么它会抛出那个错误,因为如果我只是查询这个:
SELECT ApplNbr FROM Appl WHERE ApplId = '571E00BA-70E6-4523-BEAC-4568C3DD1A7D';
Run Code Online (Sandbox Code Playgroud)
只有一行会回来正确ApplId.
到底是怎么回事?
只需使用相关表(Appl)的别名:
PROCEDURE deleteAppl(applId IN VARCHAR2) IS
.....
.....
SELECT ApplNbr
INTO lvnApplNbr
FROM Appl a
WHERE a.ApplID = applId;
......
Run Code Online (Sandbox Code Playgroud)
或将您的参数名称(applId)更改为其他名称,例如i_applId:
PROCEDURE deleteAppl(i_applId IN VARCHAR2) IS
.....
.....
SELECT ApplNbr
INTO lvnApplNbr
FROM Appl
WHERE ApplID = i_applId;
......
Run Code Online (Sandbox Code Playgroud)
因为在你的情况下,多个匹配感知,如果你parameter's name和他们column name是相同的.
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |