我有一個查詢,在select語句中使用自定義構建函數來返回其中一個值。強制Oracle一次處理一行
我現在遇到的問題是,每次偶爾這個函數都會出錯,因爲它返回多行信息。 SQL錯誤:ORA-01422:精確提取返回的請求數超過要求的行數
爲了進一步解決問題,我檢查了該查詢應該運行的範圍內的表數據,並且找不到任何可能重複的行基於這個函數的where子句。
所以我想要一個快速的方法來確定原來的查詢的哪個行崩潰,以便我可以從該查詢中將值傳遞到該函數並重建函數查詢與這些值來獲取它的值結果並查看哪些兩行或更多行被返回。
任何想法?我希望能有辦法強制Oracle一次處理一行,直到它出錯爲止,以便您可以看到第一個錯誤的結果。
添加的代碼:
FUNCTION EFFPEG
--Returns Effective Pegged Freight given a Effdate, ShipTo, Item
DATE1 IN NUMBER -- Effective Date (JULIANDATE)
, SHAN IN NUMBER -- ShipTo Number (Numeric)
, ITM IN NUMBER -- Short Item Number (Numeric)
, AST IN VARCHAR -- Advance Pricing type (varchar)
, MCU IN VARCHAR Default Null --ShipFrom Plant (varchar)
) RETURN Number
IS
vReturn Number;
BEGIN
Select ADFVTR/10000
into vReturn
from PRODDTA.F4072
where ADEFTJ <= DATE1
and ADEXDJ >= DATE1
and ADAN8 = SHAN and ADITM = ITM
and TRIM(ADAST) = TRIM(AST)
and ADEXDJ = (
Select min(ADEXDJ) ADEXDJ
from PRODDTA.F4072
where ADEFTJ <= DATE1
and ADEXDJ >= DATE1
and ADAN8 = SHAN
and ADITM = ITM
and TRIM(ADAST) = TRIM(AST));
查詢調用此代碼,並在傳遞的價值觀是:
select GLEXR, ORDTYPE,
EFFPEG(SDADDJ, SDSHAN, SDITM, 'PEGFRTT', SDMCU),
from proddta.F42119
和代碼是? – igr
這不是你要求的,但SELECT DISTINCT解決了你提到的問題。沒有看到你的功能是什麼樣子,很難說我們如何能夠幫助你。 –
是否有一個原因,您不希望將錯誤日誌記錄添加到該函數中,以便在遇到錯誤時記錄它所調用的特定參數。此外,請注意,由於SQL是基於集合的,因此Oracle對由WHERE子句謂詞稍後過濾的行執行函數是完全合法的。因此,您不一定只需查看最終由查詢返回的行。 –