ora-01422提取大小

问题描述

我收到ORA-1422错误。这是错误

连接到数据库Quantum Train。 ORA-01422:精确获取返回的行数超过了请求的行数 ORA-06512:位于“ TRAIN.UPDATE_MASTER_TO_NULL”,第26行 ORA-06512:在第2行 流程已退出。 与数据库Quantum Train断开连接。

PROCEDURE UPDATE_MASTER_TO_NULL

is

-- This gets the pnm_auto_keys for the records in the warehouse and location with the specified  manufacturer

    Cursor Csr is
    Select pnm.loc_auto_key
    from parts_master pnm join warehouse whs on pnm.whs_auto_key = whs.whs_auto_key
    where whs.warehouse_code = 'SHOP' and
            pnm.loc_auto_key <> '39';
    --      pnm.loc_auto_key <> '39' and
    --      pnm.loc_auto_key <> '26' and
    --      pnm.loc_auto_key <> '14';
        
     
          
     loc_key integer;

    Begin

    For i in Csr Loop

-- Now get the loc_auto_key for your new location

    Select loc2.loc_auto_key
    into loc_key
    From PARTS_MASTER loc2
    Where loc2.loc_auto_key is null;

--  Assigne the new loc_auto_key to the selected record.

    Update parts_master pnm2
    Set pnm2.loc_auto_key = loc_key
    where pnm2.loc_auto_key = i.loc_auto_key;

    End Loop;

    Commit;

    End UPDATE_MASTER_TO_NULL;

谢谢

杰夫

解决方法

问题在于此select语句返回的行不止

Select loc2.loc_auto_key
into loc_key
From PARTS_MASTER loc2
Where loc2.loc_auto_key is null;

如果您修改该查询以仅返回一行,那么您的代码应该可以工作。

此外,通过使用类似于以下内容的单个更新语句,可以替换整个过程并提高效率:

UPDATE parts_master pm
   SET pm.loc_auto_key =
           (SELECT *
              FROM (SELECT pm2.loc_auto_key
                      FROM PARTS_MASTER pm2
                     WHERE pm2.loc_auto_key IS NULL)
             WHERE ROWNUM = 1)
 WHERE     pm.whs_auto_key IN (SELECT w.whs_auto_key
                                 FROM warehouse w
                                WHERE w.warehouse_code = 'SHOP')
       AND pm.loc_auto_key <> '39';