oracle實現預存程序的分頁並用java代碼調用預存程序

來源:互聯網
上載者:User

create table emp(
id int,
ename varchar2(30),
sale number(7,2) --共7位xxxxx.xx 最大就是這樣的資料
)

--開發一個包---

create or replace package testpackage as
type test_cursor is ref cursor;
end testpackage;

--開始寫分頁的過程
create or replace procedure fenye
(tableName in varchar2,
pagesizes in number,--一頁顯示記錄
pageNow in number,
myrows out number,--總記錄數
myPageCount out number,--總頁數
p_cursor out testpackage.test_cursor--返回的記錄集
)is
--定義變數
--定義sql語句 字串---
v_sql varchar2(1000);--定義sql長度
--定義兩個整數
v_begin number:=(pageNow-1)*pagesizes+1;
v_end number:=pageNow*pagesizes;
begin
--開始執行-----
v_sql:='select * from
(select t1.*,rownum rn from ( select * from '||tableName||' order by sale) t1 where rownum<='||v_end||')
where rn>='||v_begin;
--把遊標和sql關聯----
open p_cursor for v_sql;
--計算myrows和mypageCount
--組織了一個sql 語句
v_sql:='select count(*) from '||tableName;
--執行sql,並把返回的值,賦給 myrows
execute immediate v_sql into myrows;-- 執行字串的sql語句 必須格式
--計算mypageCount--
if mod(myrows,pagesizes)=0 then
myPageCount:=myrows/pagesizes;
else
myPageCount:=myrows/pagesizes+1;
end if;
--關閉遊標
close p_cursor;--必須關閉遊標,不是不能釋放佔有的空間,這很重要
end;

使用java代碼 調用oracle 的預存程序

try{
          Class.forName("oracle.jdbc.driver.OracleDriver");
           Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.102:1521:orcl","plsqltest","plsqltest");
           CallableStatement cs=ct.prepareCall("call fenye(?,?,?,?,?,?)");
           //這是一個輸入 參數
           cs.setString(1,"emp");
           cs.setInt(2,3);
           cs.setInt(3,1);
           //兩個輸出參數 必須寫上
           cs.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER);
       cs.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER);
       cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
           //執行
           cs.execute();
//           把傳回值 放入 java 變數中
          int sumRows=cs.getInt(4);
          int sumPage=cs.getInt(5);
          System.out.println("sumRows : is"+sumRows+" sumPage is"+sumPage);
             ResultSet rs=(ResultSet)cs.getObject(6);
           //關閉
             while(rs.next())
             {
              System.out.println("編號="+rs.getInt(4)+"姓名="+rs.getString(2)+"薪水="+rs.getFloat(3));
             }
           cs.close();
           ct.close();
          }catch(Exception e){
           e.printStackTrace();
          }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.