天天看點

oracle在pl/sql中如何調用分頁程式傳回的sys_refcursor

在查找oracle分頁程式時找到這位高手寫的一個程式https://blog.csdn.net/fhl13017599952/article/details/80278626,發現隻有mybatis的調用,沒有oracle自身的調用,于是摸索了一下解決了,代碼如下:

declare
  p_sql   varchar2(300):='select e.empno,d.dname from scott.emp e,scott.dept d where e.deptno=d.deptno order by empno';
  p1              number := 1;--目前頁
  p2              number := 5;--每頁顯示記錄的條數
  v_totalRecords  NUMBER; --總記錄數
  v_totalPages    NUMBER; -- 總頁數
  type test is record(
  v_empno scott.emp.empno%type,  --emp表
  v_deptno scott.dept.dname%type,--dept表
  r number  --ROWNUM這個不能漏了,否則會報ORA-00932,因為分頁程式裡面有rownum
  );--這裡可以把多表查詢當成一個臨時表的思路來看
  v_test test;--
  outData sys_refcursor;  -- 輸出結果集遊标
begin
  P_TEST_PAGING_QUERY(p_sql,
                      p1,
                      p2,
                      v_totalRecords,
                      v_totalPages,
                      outData);
  dbms_output.put_line(p1);
  dbms_output.put_line(p2);
  dbms_output.put_line(v_totalRecords);
  dbms_output.put_line(v_totalPages);

  loop 
  fetch outData into   v_test;
  exit when outData%notfound;
  dbms_output.put_line(v_test.v_empno||' NO'||v_test.r);
  end loop;
  close outData;  
end;