hur.cn - 华软网

 热门搜索

PB如何调用ORACLE存储过程中返回的REF CURSOR

  作者:未知    来源:网络    更新时间:2019/10/7
程序包:
create or replace package REFCURSOR_PKG as
  TYPE refCursorType IS REF CURSOR;
end REFCURSOR_PKG;


存储进程:
create or replace procedure sp_page(p_PageSize int,  --每页记录数
   p_PageNo   int,  --当前页码,从1起头
   p_SqlSelect varchar2,  --查询语句,含排序部份
   p_OutRecordCount out int,  --前往总记录数
   p_OutCursor out REFCURSOR_PKG.refCursorType) 
as
  v_sql varchar2(3000);
  v_count int;
  v_heiRownum int;
  v_lowRownum int;
  
begin
 --取记录总数
 v_sql := 'select count(*) from (' || p_SqlSelect || ')';
 execute immediate v_sql into v_count;
 p_OutRecordCount := v_count;
 --执行分类查询
 v_heiRownum := p_PageSize * p_PageNo;
 v_lowRownum := v_heiRownum - p_pageSize + 1;
 v_sql := 'select * 
              from(select A.*,rownum rno
                      from('|| p_SqlSelect ||') A 
                      where rownum <= '|| to_char(v_heiRownum) ||'
                   ) B 
              where rno >= '|| to_char(v_lowRownum); 
 open p_OutCursor for v_sql;
end;


pb如何调用前往的p_OutCursor?能用数据窗口或数据存储吗?
------华软网友回答------
帮顶!
------华软网友回复------
做一个数据源为store procedure的数据窗口不就能够吗?
------华软网友回复------
to kirao:
由于p_SqlSelect为参数,每次可能操作表不同,写这个存储进程的目的为了能通用,所以做一个数据源为store procedure的数据窗口的方法行不通 会提醒你表名无效。
------华软网友回复------
看着挺复杂,没这么用过,也没见过这样的procedure.
------华软网友回复------
数据类型大概,只可用动态sql4
你把out只留ref cursor,循环fetch就好了
dw似乎不可能实现。
------华软网友回复------
to AFIC:只把out留给ref curcor,在PB中运用declare和execute该存储进程后,fetch该存储进程中的into后应该怎么写?我也和北京的PB技术支持联系过,他似乎也没有措施,前往的ref cursor也存留记录,请指点,谢谢!
------华软网友回复------
前往的ref cursor也存留记录
----------------
是什么意思?
我见过前往2个ref cursor
先fetch一个,再fetch另一个都没有问题
------华软网友回复------
To AFIC:
declare page procedure for sp_page(.....) using sqlca;
execute page;
fetch page into ?
?处应该怎么用什么变量
------华软网友回复------
如果你知道类型
直接
fetch page into :var1,:var2,:var3就能够。
如果你不知道类型能够采取动态sql4
帮助艘
Dynamic SQL Format 4 statement
------华软网友回复------
to AFIC:
谢谢 问题已解决! Dynamic SQL Format 4 statement 不错的书      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。