selectステートメントでカスタムビルド関数を使用して値の1つを返すクエリがあります。
私が抱えている問題は、この関数が複数の行の情報を返すため、時々エラーになることです。SQL エラー: ORA-01422: 正確なフェッチが、要求された行数を超えて返されます
問題をさらに複雑にするために、このクエリを実行する必要がある範囲内のテーブル データをチェックしましたが、この関数の where 句に基づいて重複する行を見つけることができません。
したがって、元のクエリのどの行でこれがクラッシュするかを簡単に特定して、そのクエリから関数に渡される値を取得し、これらの値を使用して関数クエリを再構築して結果を取得し、どれを確認できるかを簡単に確認したいと思います。 2 つ以上の行が返されます。
何か案は?最初のエラーまでの結果を確認できるように、エラーが発生するまでOracleに一度に1行ずつ処理させる方法があることを望んでいました。
コードを追加しました:
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