- PR -

oo4oを使用してのPageSize指定

1
投稿者投稿内容
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2005-10-31 16:46
SQL(select文)の結果をWEB上に出力する際に、例えば、結果が500件あったら、まず100件表示して、次のページというタグをクリックすると、次の100件を表示という感じで表現したいと思っています。ADOだとそのようなやり方が載っていますが、oo4oでのやり方をしっていらっしゃる方がおりましたら、どうかアドバイスをお願いいたします。

今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-10-31 17:17
引用:

emmaさんの書き込み (2005-10-31 16:46) より:
SQL(select文)の結果をWEB上に出力する際に、例えば、結果が500件あったら、まず100件表示して、次のページというタグをクリックすると、次の100件を表示という感じで表現したいと思っています。ADOだとそのようなやり方が載っていますが、oo4oでのやり方をしっていらっしゃる方がおりましたら、どうかアドバイスをお願いいたします。




以前、自分もoo4oで同様のことを実現したことがあります。
そのときはSQLで対応しました。

SQLでの対応方法ですが、
Oracleの隠し列?でrownumがあります。
これは出力対象の列を1から行数分の連番を持っている列です。
表示したい行数が分かっているのであれば
コード:

where rownum >= 100 and rownum < 200


とSQL文で書くことで100件目から199件目までを取得することができます。

表示件数を絞りたいだけであれば、これで済むのですが、

全体件数を表示しつつX件目〜Y件目を表示したいというのであれば、
分析関数のcountを用いて列としての全体件数を付加し、
X件目〜Y件目という条件を付加してあげればできます。

自分のところで申し訳ないのですが、
分析関数countのSQLの例となるページがあるので、
http://kaya.wankuma.com/tipssql/orasql1.htm
を参照してみてください。

[ メッセージ編集済み 編集者: 夏椰【SUICA】 編集日時 2005-10-31 17:18 ]
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2005-10-31 17:37
夏椰【SUICA】さん、ご返答ありがとうございました。

参照のページを拝見させてもらいましたが、そのことでお聞きしたいことがございます。

select * from (
select
rownum rn, --行番号
count(key) over ( partition by 0 ) selected_rownum, --全体件数
select key from Aorder by t.key
)
where rn between X and Y

とありますが、例えば、単純に、select count(*) from table_A where col_a = '1'というSQLがあったとして、この全件数が、550件(selectしてみないと分からない)として、100件ずつ表示させたい場合は、上記のSQLをどう修正すればよろしいのでしょうか?お願いいたします。


明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2005-10-31 17:42
http://oraclesqlpuzzle.hp.infoseek.co.jp/10-3.html

こんな方法もありますね
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-10-31 17:48
引用:

emmaさんの書き込み (2005-10-31 17:37) より:

例えば、単純に、select count(*) from table_A where col_a = '1'というSQLがあったとして、この全件数が、550件(selectしてみないと分からない)として、100件ずつ表示させたい場合は、上記のSQLをどう修正すればよろしいのでしょうか?お願いいたします。




select count(*) from table_A 〜ではどう頑張っても1行しか帰ってこないので、

table_Aにcol_a,col_b,col_cが存在し、col_bはNOT NULL列である。

このテーブルからcol_a='1'となるデータを取得し
1行目から99行目までを表示したい。

とした場合、
コード:
select * 
FROM
(
 select 
  count(col_b) over ( partition by 0 ) selected_rownum,
  rownum rn,
  col_b,
  col_c 
 from 
  table_A 
 where 
  col_a = '1'
)
where
 rn >= 1 and
 rn < 100


というSQLになります。
分析関数countを使い全体行を列として付加したテーブルに対し、
X行目〜Y行目という条件を付加しています。

上記の分析関数countはcol_bが0以上であるものの件数が表示されます。
1

スキルアップ/キャリアアップ(JOB@IT)