*[.NET]外だしSQL+ページング(Oracle)
- 次回実装するとき用にメモを残します
- ページング用のParameterBeanをsql2entityで作成するためにはParameterBeanの宣言のところを以下の様に書く
!HogePmb extends SPB!
これを行うとParameterBeanで、何件ずつで、何ページ目でというのが指定ができるようになる
HogePmb pmb = new HogePmb(); pmb.Paging(5,10);
- ただし、SQL側にちょっとした細工を行う必要がある。
/*IF pmb.IsPaging*/ select hoge_id -- ELSE select count(*) /*END*/ from Hoge
- ここだけではなくて、カウント取得に関係ない箇所がある場合はこの方法でSQLから除外してあげる(order byとか。検索条件とかは逆に消してはダメ)
- さらにOracleの場合はrownumで取得件数を指定された数だけ取るように細工する。
where rownum > /*$pmb.PageStartIndex*/1 and rownum <= /*$pmb.PageEndIndex*/10
- PageStartIndexとPageEndIndexはextends SPBをつけることによってParameterBeanに追加してくれる。そちらを利用しなくてもpmb.Pagingを利用すれば自動でやってくれる。
- ここで注意したいのが、rownumを検索条件で絞られたデータに対して絞り込む様に書くこと。多分、一回検索を条件付でかけたものAに対してselect * from Aというような感じにしたものに対してwhereを追加することになると思う。ここがちょっとややこしい。
- 上記はManualPagingと呼ばれる方法を利用するときの手順。
- bhv.OutsideSql.ManualPaging.SelectPage()みたいな感じで実行できる。
- そのほかAutoPagingと呼ばれるものがあり、こちらは最後のrownum部分は必要がないかわりに全件データを取得して、C#のプログラム側でページング部分処理を行っている。