PL/SQL 에서 Oracle 데이터베이스 페이지 를 작성 하 는 저장 과정
조 회 된 결과 집합 을 되 돌려 야 하기 때문에 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 의 페이지 사상 은 이렇다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
activemq 5.5 의 입문 은 설치, 시작, 데이터베이스 지속 화 를 포함한다Apache ActiveMQ 5.5.0 은 주로 유지보수 버 전 으로 130 개가 넘 는 문 제 를 복 구 했 으 며 대부분 bug 와 개선 이 었 다. Improved performance for offline d...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.