2017-07-11 21 views
0
より多くを返します

製品タイプに基づいてBALANCEを返す関数を記述しました。私は各製品の種類のために複数持っていると私は以下のようにパイプの行を使用している。 Oracleパイプライン返却ORA-06548:必要な行がもうありませんORA-01427:単一行サブクエリが

create or replace function GETACC_BAL(pi_CUS_MDB_IID in number, 
                pi_EN_TYPE in varchar2, 
                pi_ADC_IID  in number, 
                pi_CUS_MDB_IID in number, 
                pi_expiryDate  in Date) 
return ACC_CUS_BAL_ARR pipelined as 


begin 
     for i in (select * 
        from CUST_BAL 
        where CUS_MDB_IID = pi_CUS_MDB_IID 
        and EN_TYPE = pi_EN_TYPE 
        and ADC_IID = pi_ADC_IID 
        and BALANCE <> 0) loop 

         pipe row(AC_CUS_BAL(I.EXPDATE, 
               I.ADC_IID, 
               I.EN_TYPE, 
               I.BALANCE, 
               'A' 
               )); 
     end loop; 

     return; 
end GETACC_BAL; 

/

iはループが一列を生成する上記機能を実行

が動作しているが、倍数行の場合には、私ORA-06548、ORA-01427。私はwhen_no_data_needed例外を使用しようとしましたが、運はありません。

誰かがこれを助けることができますか?

ありがとうございました

+0

あなたの質問にも、手続き 'AC_CUS_BAL'を追加してください。 –

答えて

0

ORA-06548の例外処理を追加しました。あなたがエラーを取得しますが、単に警告として意図されて:あなたは

select * from my_pipelined_function where rownum = 1; 

機能のように、それからのフェッチよりも、パイプライン機能は、より多くの行を生成する通じませんが、最初の行で停止この例では "警告"例外が発生します。

は、この例外を飲み込むためにあなたの関数にラインを引く次の例外を追加します。

... 
    return; 
EXCEPTION WHEN NO_DATA_NEEDED THEN NULL; 
end GETACC_BAL; 
関連する問題