SSISO Community

시소당

PageNation rownum은 이제 그만!! ★。SQL - 오라클

SELECT a.* FROM (

SELECT row_number() over (ORDER BY plan_start_date_time DESC) AS row_number,

       count(*) over() AS row_count,

       proc_svr_id, proc_id, proc_name, proc_desc, work_item_seq,

       act_seq, act_name, act_dscpt, act_state, prtcp_type, prtcp_name,

       prtcp_id, work_item_prtcp_id, work_item_state, work_item_onasync,

       start_date_time, complete_date_time, check_out_user,

       check_out_user_name, complete_user_name, resp_group_def_name,

       work_item_resp_name, work_item_urgent, member_id, is_surrogater,

       plan_start_date_time, plan_complete_date_time,deadline_date_time,work_item_priority

  FROM bfuv_my_work_list

  WHERE member_id = :memberid AND work_item_state IN ('I','R','P','V')

  ORDER BY plan_start_date_time DESC

) a

WHERE row_number>=:start_row AND row_number<=:end_row

 

 

 

row_number() over(정렬조건) : 기존의 ROWNUM 을 사용할 때에는 정렬되기전에 rownum이 계산되기
                                                때문에 정렬 조건을 주게되면
rownum 기준으로 페이지를 잘라 올 수 없음.

                                                ( 이것을 보완하는 방식이 row_number() over()를 이용하여 해결한다.

 

count(*) over() : Pagination을 위해서는 목록의 총 개수를 구해 오는 것이 필요한데,

                          기존에는 총 개수를 구하기 위해서 Count SQL을 수행하고 다시

                          실제 목록을 가져오는 SQL 두 번 수행해서 가져오게 된다.

                          이를 한번에 해결 하기 위해서 count(*) over() 를 이용한다.

 

row_number>=:start_row AND row_number<=:end_row : row_number() over() 함수를 통해서 목록을

                                                                                       채번하고 해당 페이지의 결과set 가져오도록 한다.

1705 view

4.0 stars