ORA-01422:精确提取返回超过请求的行数pl / sql

时间:2015-04-09 06:38:11

标签: oracle plsql

我的PL / SQL中有这个proc。 当我在sql dev中运行它时,它只给我一行(一列)

PROCEDURE Newpo_code(sp_code OUT VARCHAR2) 
IS 
BEGIN 
    SELECT To_char(Max(num)) 
    INTO   sp_code 
    FROM   (SELECT "ordernumber" num 
            FROM   "purchaseorder" 
            WHERE  ROWNUM = 1 
            ORDER  BY "pkpurchaseorderid" DESC) 
    WHERE  ROWNUM = 1; 

    SELECT Substr(sp_code, 10, 2) 
    INTO   sp_code 
    FROM   "purchaseorder"; 
END newpo_code; 

但是当我从代码级别运行它时

它给了我异常

ORA-01422: exact fetch returns more than requested number of rows

我在这里缺少什么?

我搜索了这个例外,但没有找到有用的结果。

2 个答案:

答案 0 :(得分:0)

没有太多事情可以继续,但很可能这就是失败的路线:

select substr(SP_CODE,10,2) into SP_CODE from "PurchaseOrder";

为什么呢?因为PurchaseOrder表中可能有多行,您尝试将哪个字段放在一个变量SP_CODE中。

您可能需要where上的PurchaseOrder条款。

答案 1 :(得分:0)

PROCEDURE Newpo_code(sp_code OUT VARCHAR2) 
IS 
BEGIN 
    SELECT To_char(Max(num)) 
    INTO   sp_code 
    FROM   (SELECT "ordernumber" num 
            FROM   "purchaseorder" 
            WHERE  ROWNUM = 1 
            ORDER  BY "pkpurchaseorderid" DESC) 
    WHERE  ROWNUM = 1; 

    SELECT Substr(sp_code, 10, 2) 
    INTO   sp_code 
    FROM   dual; 
END newpo_code; 

完成! 不管怎么说,多谢拉。