2016-10-26 10 views
1

私はレコードのリストを返す関数を持っていて、リストの上をループしてパイプしていますが、パイプ中にはORA-01403: no data foundエラーが発生しています。データが見つかりません

以下は使用しているコードですが、一部の行でこのエラーが発生していますが、すべてではありません。

注:tab_pipe.t_tabおよびtab.t_tabは同じレコードtab.r_tabの表です。

Function pipelinedFunction(ref varchar2, seq varchar2) Return tab_pipe.t_tab pipelined Is 
pragma autonomous_transaction; 
    errtxt varchar2(400); 
    tab tab.t_tab; 
begin 
    tab := generate_table(ref, seq); 

    for i in 1 .. tab.count loop 
    begin 
     pipe row(tab(i)); 
    EXCEPTION 
     when others then 
     v_errtxt := sqlerrm; 
     insert into test_kc values('an error occurred piping the row i = ' || i || ' - sqlerrm = ' || v_errtxt); commit; 
    end; 
    end loop; 

    return; 
end pipelinedFunction; 

答えて

2

多分、iのすべての値に対してタブにエントリがありません。

私はlogner問題とすべてのレコードを返すされていない得るが、あなたは `たぶん私のすべての値のタブにエントリがないことで何を意味しています最初と次の

declare 
    l_index PLS_INTEGER; 
BEGIN 
    l_index := tab.FIRST; 

    WHILE (l_index IS NOT NULL) 
    LOOP 
    pipe row(tab(l_index)); 
    l_index := tab.NEXT(l_index); 
    END LOOP; 
END; 
+0

を使用してループを試してみてください。 '、あなたは特定のインデックスのレコードのすべてがnullの列値を持っていることを意味しますか? –

+0

1からtab.countにループします。タブ(3)が存在しない可能性がありますか? generate_tableが何をしているのか分からなければ何も言いません。 – Rene

+0

しかし、私は '' tab.count'を使用する前に 'tab.first .. tab.last'を使っていましたが、まだ同じ問題が発生していました。 この問題の原因となっているレコードのテーブルを生成する関数から何かがありますか? –

関連する問題