问题描述
连接到数据库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';