我有以下sql(oracle),它從表中除去100個最新的表中的所有行。ORA-01422:精確提取返回的請求數量超過請求的行數
DELETE FROM my_table tab_outer
WHERE tab_outer.rowid IN (
-- Fetch rowids of rows to delete
SELECT rid FROM (
SELECT rownum r, rid FROM (
SELECT tab.rowid rid
FROM my_table tab
ORDER BY tab.created_date DESC
)
)
-- Delete everything but the 100 nesest rows
WHERE r > 100
)
-- Return newest date that was removed
RETURNING max(tab_outer.created_date) INTO :latestDate
此代碼有時會給出一個ORA-01422: exact fetch returns more than requested number of rows
聲明多個行被插入到latestDate中。這怎麼可能? RETURNING INTO子句中的聚合函數(max)應確保只返回一行,否?它可能與顯式使用或rowid(我不知道如何)有什麼關係?
任何機會,您傳遞給查詢的變量的名稱與表中的任何其他列的名稱相同?添加您正在運行此刪除的表的定義。以及如何在程序中調用此查詢? – Mikhail