日期:2014-05-17  浏览次数:20806 次

关于调用弱类型游标的问题
create or replace package temp_pack2 is
type refCursorType is ref cursor;
 procedure sp_Page(p_PageSize int, --每页记录数
  p_PageNo int, --当前页码,从 1 开始
  p_SqlSelect varchar2, --查询语句,含排序部分
  p_OutRecordCount out int,--返回总记录数
  p_OutCursor out refCursorType);
end temp_pack2;
--包体
create or replace package body temp_pack2 is
procedure sp_Page(p_PageSize int, --每页记录数
  p_PageNo int, --当前页码,从 1 开始
  p_SqlSelect varchar2, --查询语句,含排序部分
  p_OutRecordCount out int,--返回总记录数
  p_OutCursor out 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_PageNo * p_PageSize;
  v_lowRownum := v_heiRownum - p_PageSize + 1;

  v_sql := 'SELECT *
  FROM (
  SELECT A.*, rownum rn 
  FROM ('|| p_SqlSelect ||') A
  WHERE rownum <= '|| to_char(v_heiRownum) || '
  ) B
  WHERE rn >= ' || to_char(v_lowRownum) ;
  --注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn
  
  OPEN p_OutCursor FOR v_sql;
end sp_Page;
end temp_pack2;

这个存储过程在java中可以调用,想在pl/sql中测试,不知道怎么测试......

------解决方案--------------------
plsql developer中有测试窗口 执行你的过程并可以进行bug调试
------解决方案--------------------
右击过程,测试,