PL/SQL 에서 Oracle 데이터베이스 페이지 를 작성 하 는 저장 과정

사실 Oracle 데이터베이스 의 페이지 는 비교적 이해 하기 쉽다.이 글 은 Oacle 데이터베이스 에 있 는 SCOTT 사용자 의 EMP 표를 예 로 들 어 PL/SQL Developer 로 페이지 저장 과정 을 작성 합 니 다.표 이름 을 입력 하고 각 페이지 에 기록 수,현재 페이지 를 표시 하 며 총 기록 수,총 페이지 수 와 되 돌아 오 는 결과 집합 을 되 돌려 주 십시오.
조 회 된 결과 집합 을 되 돌려 야 하기 때문에 PL/SQL 에 package 를 만들어 야 합 니 다.이 가방 에는 refcursor 형식 이 정의 되 어 있 습 니 다.sql 문 구 를 조회 한 결과 집합 을 기록 하 는 데 사 용 됩 니 다.가방 을 만 드 는 코드 는 다음 과 같 습 니 다:

create or replace package pagingPackage as 
type paging_cursor is ref cursor; 
end pagingPackage; 
다음은 Oracle 의 페이지 나 누 기 과정 을 시작 합 니 다.우 리 는 selectemp.*,rownum from emp 을 사용 할 수 있 습 니 다.줄 마다 표 시 를 표시 합 니 다.그 다음 에 줄 표지 에 따라 내용 을 페이지 로 나 눌 수 있 습 니 다.아래 에 있 는 SQL 문 구 는 Oracle 페이지 의 템 플 릿 으로 할 수 있 습 니 다.

select * from  
(select t1.*,rownum rn from (select * from emp) t1 where rownum<=12) 
where rn>=8;
위의 refcursor 형식 과 페이지 템 플 릿 이 있 습 니 다.다음은 페이지 를 나 누 는 저장 과정 을 시작 합 니 다.코드 는 다음 과 같 습 니 다.

create procedure paging 
(tableName in varchar2 ,--   
pageSizes in number,--        
pageNow in number,--    
rowNums out number,--     
pageNum out number,--    
paging_cursor out pagingPackage.paging_cursor) is  
--     
--  sql  ,    
v_sql varchar2(1000); 
--      ,                
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||') t1 where rownum<='||v_end||') where rn>='||v_begin; 
 --    sql     
 open paging_cursor for v_sql; 
 --  rowNums pageNum 
 --    sql   
 v_sql:='select count(*) from '||tableName; 
 --   sql  ,   rowNums 
 execute immediate v_sql into rowNums; 
 --  pageNum 
 if mod(rowNums,pageSizes)=0 then 
  pageNum := rowNums/pageSizes; 
  else 
   pageNum := rowNums/pageSizes+1; 
   end if; 
 end; 
자바 에서 코드 테스트 페이지 를 작성 합 니 다.코드 는 다음 과 같 습 니 다.

package com.test.oracletest; 
import java.sql.CallableStatement; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
//     
public class OraclePaging { 
  public static void main(String[] args) { 
    try { 
      //      
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      //      
      Connection connection = DriverManager.getConnection( 
          "jdbc:oracle:thin:@127.0.0.1:1521:ORCL", "SCOTT", "tiger"); 
      //   CallableStatement,           
      CallableStatement cst = connection 
          .prepareCall("{call paging(?,?,?,?,?,?)}"); 
      //  ?   
      cst.setString(1, "emp"); 
      cst.setInt(2, 6); 
      cst.setInt(3, 2); 
      //            
      cst.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER); 
      cst.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER); 
      cst.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR); 
      //    
      cst.execute(); 
      //       
      int rowNums = cst.getInt(4); 
      int pageNum = cst.getInt(5); 
      ResultSet rs = (ResultSet) cst.getObject(6); 
      System.out.println("    rowNums = " + rowNums); 
      System.out.println("   pageNum = " + pageNum); 
      System.out.println("EMPNO" + '\t' + "ENAME" + '\t' + "ROWNUM"); 
      while (rs.next()) { 
        System.out.println(rs.getInt("EMPNO") + " " + '\t' 
            + rs.getString("ENAME") + '\t' + rs.getInt("RN")); 
      } 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } finally { 
      //      
    } 
  } 
} 
실행 결 과 는 그림 과 같다.

우 리 는 템 플 릿 의 가장 안쪽 보 기 를 수정 함으로써 다른 기본 적 인 정렬 요 구 를 만족 시 킬 수 있다.Oracle 의 페이지 사상 은 이렇다.

좋은 웹페이지 즐겨찾기