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 만 가져오도록 한다.
SSISO Community