pl/sql過(guò)程分頁(yè)顯示小案例
編寫一個(gè)過(guò)程,要求可以輸入表名,輸入每頁(yè)顯示的記錄數(shù),輸入當(dāng)前頁(yè),返回總記錄數(shù),總頁(yè)數(shù),和返回的結(jié)果集
---------------------------------------------------------------------
SQL>create or replace package testPackage as type test_cursor(游標(biāo)名) is ref cursor(游標(biāo))
end testPackage
SQL>create procedure p8(table_name in varchar2,--表名
pageSize in number, --當(dāng)前顯示的記錄數(shù)
pageNow in number,--當(dāng)前頁(yè)
--下面都是要返回的內(nèi)容,其值在過(guò)程處理中賦予
myrows out number, --總記錄數(shù)
myPageCount out number, --總頁(yè)數(shù)
p_cursor out testPackage.test_cursor --返回的結(jié)果集
) is
--定義sql語(yǔ)句
v_sql varchar2(1000);
v_begin number := (pageNow - 1)*pageSize + 1; -- 每頁(yè)顯示的最少數(shù)
v_end number := pageNow * pageSize; --每頁(yè)顯示的最大數(shù)
bgein
v_sql := 'select * rownum from (SQL>select a1.*,rownum rn from (select name,sal from '||table_name||')
a1 where rownum<='||v_end||') where rownum>'||v_begin||'';
open p_cursor for v_sql; --打開一個(gè)游標(biāo),將游標(biāo)和sql語(yǔ)句關(guān)聯(lián)起來(lái)
v_sql : = 'select count(*) from '||table_name''; --計(jì)算myrows和myPageCount
execute immediate v_sql into myrows ; --執(zhí)行sql,并把返回值賦給myrows來(lái)記錄總記錄數(shù)
if mod(myrows,pageSize)= 0 then --計(jì)算總頁(yè)數(shù),注意思路,很好理解
myPageCount := myrows/Pagesiez;
else
myPageCount := myrows/Pagesiez + 1;
end if
close p_cursor; --關(guān)閉游標(biāo)
end;
/
------------------------------------------------------------------------------------------------------
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:
CallableStatement cs = ct.prepareCall("{call p8(?,?,?,?,?,?)}");
//給?賦值
cs.setString(1,"myTable");
sc.setInt(2,5);
sc.setInt(3,1);
//給out參數(shù)?賦值
cs.registOutPrameter(4,oracle.jdbc.OracleTypes.INTEGER);//這側(cè)記錄總數(shù)
cs.registOutPrameter(5,oracle.jdbc.OracleTypes.INTEGER);//注冊(cè)總頁(yè)數(shù)
cs.registOutPrameter(6,oracle.jdbc.OracleTypes.CURSOR);//注冊(cè)返回的結(jié)果集
//執(zhí)行
cs.execute();
//得到結(jié)果集
ResultSet rs = (ResultSet) cs.getObject(6);
//取出總記錄數(shù)
int rowNum = cs.getInt(4);
//返回總頁(yè)數(shù)
int pagecount = cs.getInt(5);
while(rs.next()){
System.out.println(rs.getInt(1) + "--" + rs.getString(2));
}
//關(guān)閉相關(guān)資源,此處略寫
作者 chunqiuwei