自己参照例子写的一个Oracle分页的存储过程,调了好久,不知道错在哪里,麻烦帮忙看下
总是报“警告: 创建的过程带有编译错误。”
以下是代码:
--1、建一个包,用户创建一个游标类型
CREATE or REPLACE package pkg_query AS
  TYPE cur_query is ref CURSOR;
END pkg_query;--2、创建存储过程
CREATE OR REPLACE PROCEDURE proc_tb_paging
(tableName  in varchar2, --表名
   strWhere   in varchar2, --WHERE条件
   orderBy  in varchar2, --排序
   orderFiedName  in varchar2, --排序字段
   pageIndex in out number, --页码
   pageSize in out number, --页大小
   totalRecords out number, --总数据
   totalPages out number, --总页数
   v_cur out pkg_query.cur_query --返回的结果集
)
IS
v_sql varchar2(100):='';--SQL语句
v_startRecord number(4);--开始显示数据记录的第几条
v_endRecord number(4); --结束显示数据记录的第几条
BEGIN
--记录中总记录条数
v_sql:='select to_number(count(*)) from '||tableName||'where 1=1 ';
IF strWhere is not null or strWhere <> '' THEN v_sql:=v_sql||strWhere;
END IF;
EXECUTE IMMEDIATE v_sql INTO totalRecords;--执行语句并将值赋值给totalRecords--验证页面记录大小
 IF pageSize<0 THEN pageSize=0;
END IF;
--根据页面值大小算返还页面数据的大小,MOD()是算出两数的余数值
IF MOD(totalRecords,pageSize)=0 THEN totalPages:=totalRecords/pageSize;
ELSE
 totalPage:=totalRecords/pageSize+1;
END IF;--得出页码
IF pageIndex<1 THEN
 pageIndex=1;
END IF;
 IF pageIndex>totalPages THEN
pageIndex:=totalPages;
END IF;--实现分页查询,根据各参数拼成查询语句
v_startRecord:=(pageIndex-1) * pageSize+1;
v_endRecord:=pageIndex * pageSize;
v_sql:='select * from '(SELECT A.*,RowNumber r FROM '||(select * from '||tableName;
IF strWhere is not null or strWhere <> '' THEN v_sql:=v_sql||'where 1=1 '||strWhere;
END IF;
IF orderFiedName is not null or orderFiedName <> '' THEN v_sql:=v_sql||'order by'|| orderFiedName ||' '||orderBy;
END IF;
v_sql:=v_sql||')A where A.RowNumber<='||v_endRecord||')B where r>='||v_startRecord;
DBMS_OUTPUT.put_line(v_sql);
OPEN v_cur FOR v_sql;END proc_tb_paging;