Open棟梁 wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

一覧ページ制御方式を決定しておく。

最大表示件数・取得件数

最大表示件数(1画面に表示する最大件数)・最大取得件数(1回の検索で取得する最大レコード件数)は、
configファイルなどに設定し、基本的に、この最大表示件数・最大取得件数に従ってページ制御をする。
ただし、業務要件に応じて件数が異なる可能性があることを考慮し、個別の対応もする。

最大取得件数の指定方法

最大取得件数の指定方法は以下の通り。

Oracleの場合

Oracle8i R8.1.5以降で、[Row1]列の昇順に上位10件を取得するような場合、ROWNUMを使用できる。

SELECT * FROM (SELECT * FROM Table1 ORDER BY Row1) WHERE ROWNUM <= 10

SQL Serverの場合

Microsoft SQL Server 7.0以降で、例えば[Row1]列の昇順に上位10件を取得するような場合、TOP句を使用できる。

SELECT TOP 10 * FROM Table1 ORDER BY Row1

ページ制御の有・無

一覧を表示する際のページ制御の有・無は、業務要件に応じて設定する。

アプリケーションによる制御

SQL Server、DB2データベースなど、.NETのデータ プロバイダは、サーバ カーソルをサポートしていないものが多い。
このため、ページ制御をする場合は、はじめに主キー(IDなどの代理キー)のみの結果セットを取得し、その結果セットから
表示対象ページのレコードの主キー(IDなどの代理キー)を抽出、再度検索処理をかけ、対象ページの一覧を取得すると良いと考える。

2008/04月現在、
唯一OracleのODP.NETデータ プロバイダのDataReader?クラスは、サーバ カーソルをサポートしており、FetchSize?に指定したレコード数だけを順次取得する。
このため巨大な結果セットを取得して落ちることが無く、DataAdapter?を使用したデータアクセスより信頼性は高いと言える。
ただし、順方向専用カーソルしかサポートしていないため「ページング処理の行の順送り」で多くのラウンド トリップが発生してしまう。

ストアド プロシージャによる制御

ストアド プロシージャを使用すれば、サーバ サイドでOrder Byで整列した結果セットに対して、データ絞込みのカーソル操作が可能である。
このため、ストアド プロシージャに検索条件と、表示するデータの範囲(例えば、101-200件目までなど)を渡すなどしてデータを絞り込むことができる。

SQLによる制御

SQLを使用した、ページ制御方法は以下の通り。

Oracleの場合

SELECT
  EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO
FROM 
  EMP
ORDER BY
  EMP.ENAME

↓ ページングしたいSQL(上記)を下記のように書き直す。

SELECT * FROM (
  SELECT
    EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO,
    ROW_NUMBER() OVER (ORDER BY EMP.ENAME) RNUM
  FROM EMP
) WHERE RNUM BETWEEN 3 AND 5

SQL Serverの場合(2005以上で利用可能)

SELECT
  ShipperID, CompanyName, Phone
FROM
  Shippers
ORDER BY
  Shippers.CompanyName

↓ ページングしたいSQL(上記)を下記のように書き直す。

WITH OrderedShippers AS (
  SELECT
    ShipperID, CompanyName, Phone,
    ROW_NUMBER() OVER (ORDER BY Shippers.CompanyName) AS RNUM
  FROM Shippers
)

SELECT * FROM OrderedShippers WHERE RNUM BETWEEN 3 AND 5

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-10-05 (金) 17:11:23 (12d)