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;
4

1 回答 1

2

也许对于 i 的每个值,选项卡中都没有条目。

尝试使用 first 和 next 循环

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;
于 2016-10-26T12:28:30.167 回答