在实际的应用中我们可以根据自己的想法用Oracle存储过程做一个页的相关的存储过程,下面的文章主要是和大家分享Oracle存储过程的经验心得,希望你能通此文章对其的实际操作有个更好的了解。
之所以用存储过程,是因为以后需要修改的话不需要修改程序代码,只需要修改Oracle存储过程的代码。但这个例子是在存储过程里动态生成的SQL语句,不知道会不会因此失去存储过程一次编译和快速的特点。代码如下:
1、首先建立一个包,用户创建一个游标类型
createorreplacepackagepkg_queryas typecur_queryisrefcursor; endpkg_query;
2、创建Oracle存储过程
createORREPLACEPROCEDUREprc_query (p_tableNameinvarchar2,
表名
p_strwhereinvarchar2,
查询条件 –*
p_orderColumninvarchar2,
排序的列 –*
p_orderStyleinvarchar2,
排序方式 –*
p_curPageinoutNumber,
当前页
p_pageSizeinoutNumber,
每页显示记录条数
p_totalRecordsoutNumber,
总记录数
p_totalPagesoutNumber,
总页数
v_curoutpkg_query.cur_query)
返回的结果集
IS v_sqlVARchar2(1000):=’’;
sql语句
v_startRecordNumber(4);
开始显示的记录条数
v_endRecordNumber(4);
结束显示的记录条数
BEGIN
记录中总记录条数
v_sql:=’selectTO_NUMBER(count(*))FROM’||p_tableName||’where11=1’; IFp_strwhereISNOTNULLorp_strwhere<>’’THEN v_sql:=v_sql||p_strwhere; ENDIF; executeIMMEDIATEv_sqlINTOp_totalRecords;
验证页面记录大小
IFp_pageSize<0THEN p_pageSize:=0; ENDIF;
根据页大小计算总页数
IFMOD(p_totalRecords,p_pageSize)=0THEN p_totalPages:=p_totalRecords/p_pageSize; ELSE p_totalPages:=p_totalRecords/p_pageSize+1; ENDIF;
相关文章
标签:Oracle