PL/SQL基礎篇(分頁存儲過程+Java客戶端調用)

 綜合練習:分頁的存儲過程

-- 聯繫,創建分頁的存儲過程

--1.聲明一個引用遊標

create or replace package cur_ref_type

as -- is or as can be used

type cur_ref is ref cursor;

end;

-- 2.寫存儲過程

create or replace procedure divideByPge

          (tableName varchar2,pageSize number,currentPage number,

                  totalPage out number,totalRecord out number,results out cur_ref_type.cur_ref)-- 要帶包名

is

  v_sql varchar2(200); -- 用於寫sql語句的

  v_begin number; -- 開始位置

  v_end number; -- 結束位置

begin

  v_begin := (currentPage - 1) * pageSize;

  v_end := currentPage * pageSize;

  v_sql := 'select count(*) from '||tableName; -- 將表名字符串拼接sql語句

  execute immediate v_sql into totalRecord; --查詢所有記錄

  totalPage := ceil(totalRecord/pageSize); -- 計算總頁數

  v_sql := 'select * from (select rownum rn,'||tableName||'.* from '||tableName||' where rownum <= '||v_end||') where rn > '||v_begin;

  open results for v_sql;

end;

Java客戶端調用

String driver = "oracle.jdbc.driver.OracleDriver";

              String url  = "jdbc:oracle:thin:@localhost:1521:orcl";

              String username = "scott";

              String password = "ysjian";

              try {

                     Class.forName(driver);

                     Connection conn =

                         DriverManager.getConnection(url,username,password);

                     CallableStatement cs = conn.prepareCall("{call

                                                                      divideByPge(?,?,?,?,?,?)}");

                     cs.setString(1, "emp"); //表名

                     cs.setInt(2, 3);// 分頁單位

                     cs.setInt(3, 1); //當前頁

                     cs.registerOutParameter(4, OracleTypes.INTEGER); //註冊輸出參數

                     cs.registerOutParameter(5, OracleTypes.INTEGER);

                     cs.registerOutParameter(6, OracleTypes.CURSOR); //註冊輸出參數遊標

                     cs.execute(); //執行

                     ResultSet rs = (ResultSet)cs.getObject(6); //獲得遊標

                     while(rs.next()){

                           int empno = rs.getInt("empno");

                           String ename = rs.getString("ename");

                           System.out.println(empno+"-->"+ename);

                     }

              } catch (ClassNotFoundException | SQLException e) {

                     e.printStackTrace();

              }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章