【问题标题】:Oracle REF CursorsOracle REF 游标
【发布时间】:2018-11-01 12:01:24
【问题描述】:

有没有办法在打开引用游标以供应用程序读取后执行任何处理?

所以,我有一个参考游标:OPEN p_data FOR v_select。应用程序从中读取。之后,我的程序可以继续处理吗?还是完成了?

请指教

【问题讨论】:

  • 在过程完成之前,应用程序不会处理(获取)引用游标。您可以在open 和过程end 之间使用代码;但它不能使用 ref 游标内容,因为这会阻止应用程序看到该数据,并且它将在应用程序看到游标之前执行。你到底想做什么?
  • 当然,您的过程可以继续使用处于打开状态的游标变量。它可以在任何状态下继续任何变量。我不确定我是否理解这个问题。什么不完全有效?
  • 基本上我想在光标完成向应用程序提供数据后更新一些数据(从 PHP 调用)。如果我以前这样做,那么这些结果将包含在光标结果中,这不是此应用程序所需要的。
  • 当应用程序调用过程时,它不会得到任何返回,直到过程完成。所以,我不确定你的想法是什么流程。

标签: oracle cursor ref


【解决方案1】:

一旦光标打开,您可以从它FETCH 直到您到达,直到没有更多的数据被检索到。到那时或更快,如果您完成了数据处理,您可以CLOSE 光标。

declare
  p_data sys_refcursor;
  v_select varchar2(1000) := 'select * from dual';
  type data_rec is record (dummy dual.dummy%type);
  type data_tab is table of data_rec; 
  l_data data_tab;
begin
  OPEN p_data FOR v_select;
  LOOP
    FETCH p_data BULK COLLECT INTO l_data LIMIT 100;
    FOR r in 1 .. l_data.count LOOP
      dbms_output.put_line(l_data(r).dummy);
    END LOOP;
    EXIT WHEN p_data%notfound;
  END LOOP;
  CLOSE p_data;
end;

【讨论】:

    猜你喜欢
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    相关资源
    最近更新 更多