在一个存储过程中定义的游标,可以作为另一个存储过程的输入参数调用它吗?怎么定义呢?
如:
create or OR REPLACE PROCEDURE test1
is
  cursor c_cursor is
    select ... from ...;
begin
  test2(c_cursor);   --带入定义的游标
end test1;create or OR REPLACE PROCEDURE test2(
  c_cur    --定义游标
is
begin
  --使用定义的游标c_cur
end test2;我这样的定义是不行的,那位有解决办法?因为我有两个存储过程是不同的游标(有相同的列),需要做同样的处理.

解决方案 »

  1.   

    create or OR REPLACE PROCEDURE test2(
      c_cur      in sys_refcursor
    )
      

  2.   


    请问:在test2中怎么取得c_cur游标中的内容呢?      
      

  3.   

    我给你一个例子
    create or replace procedure P_Rain_Test(result out sys_refcursor)
    is
    begin
    open result for select * from tmp_test2;
    end;
    -------call
    declare 
    v sys_refcursor;vvid tmp_test2.vid%type;
    vage tmp_test2.age%type;
    i int:=0;
    vworkername tmp_test2.workername%type;
    begin
    P_RAIN_TEST(v);
     --open v;
     loop     fetch v into vvid,vage,vworkername; 
         exit when v%notfound;
        
        dbms_output.put_line(vworkername|| '  ' || vage); 
        i:=i+1;
      end loop; 
      close v; dbms_output.put_line(i);dbms_output.put_line('i');
    end;
      

  4.   

    test2(c_cursor);
    c_cur是参数直接用
      

  5.   

    我需要反过来的
    就是在你的例子里,call里得到游标,传给P_Rain_Test中使用,即游标result是P_Rain_Test的输入参数