使用Execute Immediate动态游标

create or replace procedure get_cur(v_cur in sys_refcursor)
    as
    v_rec user_objects%rowtype;
    begin
     fetch v_cur into v_rec;
     dbms_output.put_line(v_rec.object_name);
    end;
create or replace procedure
  call_proc_ref_cursor as
  v_cur sys_refcursor;
begin
  open v_cur for
    select * from user_objects;
  execute immediate 'begin get_cur(:1);end;'
    USING v_cur;
  close v_cur;
end;

平常动态游标的调用

CREATE OR REPLACE PACKAGE pkg_test
AS
PROCEDURE p1;
PROCEDURE p2(p_cur SYS_REFCURSOR);
END pkg_test;
/
CREATE OR REPLACE PACKAGE BODY pkg_test
AS
PROCEDURE p1
AS
  lv_cur SYS_REFCURSOR;
BEGIN
  OPEN lv_cur FOR SELECT * FROM T;
  p2(lv_cur);
  CLOSE lv_cur;
END;
PROCEDURE p2(p_cur SYS_REFCURSOR)
AS
  lv_row t%ROWTYPE;
BEGIN
  LOOP
     FETCH p_cur INTO lv_row;
     EXIT WHEN p_cur%NOTFOUND;
     DBMS_OUTPUT.PUT_LINE(lv_row.id);
  END LOOP;
END;
END pkg_test;
/

相关文章:

  • 2021-09-26
  • 2022-12-23
  • 2021-12-28
  • 2022-12-23
  • 2022-12-23
  • 2022-01-30
  • 2022-02-17
  • 2021-08-31
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-06-01
  • 2022-02-07
  • 2021-12-15
  • 2022-12-23
相关资源
相似解决方案