PL/SQL Developer Template 사용하기
가끔 기본적인 CRUD 조차 기억 못하는 나를 알아보고 준비해준 기능이라고나 할까..^^;;;
pl/sql developer 에서도 사용하자..
마찬가지로 DML외의 function, procedure등을 만들수 있는 Template가 존재한다.
Edward. K
메멘토적 기억능력을 소유한 개발자 노트.
Create Read Update Delete
ORACLE CASE [http://eknote.tistory.com/851] 에서 한단계 업그레이드된 Query 문을 공부해보자.
LEVEL_PROGRESS
|_ user_id : 플레이어 ID
|_ part : 레벨명
|_ end_date : 레벨업을 위한 완료일 ( 해당 기간내에 미션을 클리어 해야함 )
|_ complete_date : 레벨 종료 여부 ( 종료일을 기록 )
LEVEL_INFO
|_ user_id : 플레이어 ID
|_ level_name : 레벨명
|_ user_Team : 유저가 속한 TEAM ( factory)
|_ reg_date : 레벨업 도전 시작일
|_ stat : 현재 레벨상태
- STANDBY : 진행 STANDBY
- ONE : 레벨 1 종료
- TWO : 레벨 2 종료
- THREE : 레벨 3 종료 ( 승인 대기 )
- CL : 레벨 완료 승인
USER_INFO
|_ user_id : 플레이어 ID
|_ user_name : 유저이름
|_ team_code : 팀코드
|_ manager_yn : 팀장 여부 ( Y: 팀장, N: 팀원 )
2. 다음 데이터를 가지고 있다.
LEVEL_PROGRESS 완료되었을 경우에만 complete_date가 등록된다.
|_ userId, 'ONE', date, date - ONE 단계를 완료 했다.
|_ userId, 'TWO, date, - TWO 단계를 진행중이다.
3. 원하는 데이터는 다음과 같다.
모든 회원들의 정보를 가져와서. 각 회원별 레벨업 상태를 보여달라.
검색 조건은 원하는 팀만 선택하여 정보를 가져올수 있도록 한다.
4. Query
SELECT LI.user_id userId -- 이슈 ID
, LI.level_name levelTitle -- 이슈 제목
, ( SELECT user_name
FROM USER_INFO
WHERE user_id= LI.user_id AND manager_yn='Y'
) teamManager -- 팀장명
, TO_CHAR(LI.reg_date,'YYYY.MM.DD') registerDate -- 레벨업 도전 시작일
, DECODE(LI.stat,'CL','완료','THREE','레벨업 진행중','') clStatus -- 종료승인 여부
, max( DECODE( LP.part, 'ONE'
, TO_CHAR(LP.end_date,'YYYY.MM.DD')
)
) scheduleDateONE -- STEP 1 완료 예정일
, max
(
DECODE ( LP.part, 'ONE',
DECODE( LP.complete_date, null,
(
CASE
WHEN to_char(sysdate,'YYYYMMDD') > to_char(LP.end_date,'YYYYMMDD')
THEN 'D' -- 지연
ELSE 'I' -- 진행중
END
),'C' -- 레벨완료
)
)
) statusONE -- STEP 1 레벨업 현황
, max( DECODE ( LP.part, 'TWO'
, TO_CHAR(LP.end_date,'YYYY.MM.DD')
)
) scheduleDateTWO -- 원STEP 2 완료 예정일
, max
(
DECODE ( LP.part, 'TWO',
DECODE( LP.complete_date, null,
(
CASE
WHEN to_char(sysdate,'YYYYMMDD') > to_char(LP.end_date,'YYYYMMDD')
THEN 'D' -- 지연
ELSE 'I' -- 진행중
END
),'C' -- 레벨완료
)
)
) statusTWO -- STEP 2 레벨업 현황
, max( DECODE( LP.part, 'THREE'
, TO_CHAR(LP.end_date,'YYYY.MM.DD')
)
) scheduleDateTHREE -- STEP 3 완료 예정일
, max
(
DECODE ( LP.part, 'THREE',
DECODE( LP.complete_date, null,
(
CASE
WHEN to_char(sysdate,'YYYYMMDD') > to_char(LP.end_date,'YYYYMMDD')
THEN 'D' -- 지연
ELSE 'I' -- 진행중
END
),'C' -- 레벨완료
)
)
) statusTHREE -- STEP 3 레벨업 현황
FROM LEVEL_INFO LI
,LEVEL_PROGRESS LP
WHERE TO_CHAR(LI.reg_date,'YYYYMMDD') BETWEEN '20080101' AND '20080201'
AND LI.stat in('STANDBY','ONE','TWO','THREE','CL')
AND LI.user_id = LP.user_id
AND LI.user_Team in('','')
GROUP BY LI.user_id,LI.level_name,LI.reg_date,LI.stat
ORDER BY userId desc
선택된 팀에 대한 회원별 레벨 현황을 보여주기 위한 쿼리가 완성되었다.
max 와 Group By에 대한 이해가 주 목적이다..