2016-10-26 97 views
1

我有一個函數返回記錄列表,然後我循環遍歷列表並管道他們,但是在管道系統中我得到ORA-01403: no data found錯誤。沒有找到數據當管道行

以下是我正在使用的代碼,並且我在某些行上獲取了此錯誤,而不是所有這些錯誤。

注意:tab_pipe.t_tabtab.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

也許沒有條目中的每個值的條目。

嘗試循環使用第一和明年

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

我沒有logner得到這個問題,所有的記錄都回來了,但你是什麼意思'也許有在標籤爲我的每一個值的條目。 ',你的意思是某個索引中的記錄的所有列值都爲空嗎? –

+0

您從1循環到tab.count。也許選項卡(3)不存在?如果不知道generate_table的作用,就不能說這些。 – Rene

+0

但在使用'1 .. tab.count'之前,我使用了'tab.first .. tab.last',並且仍然遇到同樣的問題。 請問生成導致此問題的記錄表的函數是否有某些內容? –