2014의 게시물 표시

Oracle Window function

윈도우 함수는 분석 함수를 사용할 때 행 (Row) 의 범위를 지정 , 즉 윈도우 절 (window clause) 을 사용하는 함수들이다 . 윈도우 절은 PARTITION BY 절로 명시된 전체 그룹에서 부분 집합인 윈도우를 지정하는데 , 그 시작과 끝 범위는 BETWEEN a AND b 형태로 지정되며 , a 와 b 값에 따라 윈도우 함수가 그 계산을 수행하게 된다 . 윈도우 함수 (10g 기준 ): AVG, CORR, COVAR_POP, COVAR_SAMP, COUNT, FIRST_VALUE, LAST_VALUE, MAX, MIN, STDDEV, STDDEV_POP, STDDEV_SAMP, SUM, VAR_POP, VAR_SAMP, VARIANCE 등   구분 형식 Function(WINDOW) OVER (PARTITION BY expr ORDER BY expr [ASC | DESC] ROWS[RANGE] BETWEEN UNBOUNDED PRECEDING[CURRENT ROW] AND UNBOUNDED FOLLOWING[CURRENT ROW] )   PARTITION BY: 분석 함수가 계산을 수행하는 전체 그룹 WINDOW: 전체 그룹에서 일부분을 제외시킨 부분 그룹 혹은 부분 집합 ROWS: 부분집합인 윈도우 크기를 물리적인 단위로 행 집합을 지정 RANGE: 논리적인 주소에 의해 행 집합을 지정 BETWEEN ~ AND: 윈도우의 시작과 끝 위치를 지정 UNBOUNDED PRECEDING: 윈도우 시작 위치가 첫 번째 Row 임을 의미 UNBOUNDED FOLLOWING: 윈도우 마지막 위치가 마지막 Row 임을 의미 CURRENT ROW: 윈도우 시작 위치가 현재 Row 임을 의미   select dept, id, salary        , SUM(salary)

근무 시작시간과 근무시간 입력 받아 근무 종료시간 반환하는 함수

* 문제 근무 시작시간(i_t)과 총소요시간(i_h)을 입력 받아 근무 종료시간(o_t)을 반환하는 사용자 함수(f_Quiz)를 생성하는 문제 * 가정     - 통상 근무시간은 평일 오전 9시부터 오후 6시     - 오후 12시부터 1시는 점심시간으로 근무시간에서 제외     - 토, 일요일 및 휴일도 근무시간에서 제외     - 휴일은 별도의 테이블로 관리 <리스트 1> 휴일 테이블 생성 및 조회 CREATE TABLE t_holiday AS SELECT '20140101' dt FROM dual UNION ALL SELECT '20140130' FROM dual UNION ALL SELECT '20140131' FROM dual UNION ALL SELECT '20140201' FROM dual UNION ALL SELECT '20140301' FROM dual UNION ALL SELECT '20140505' FROM dual UNION ALL SELECT '20140506' FROM dual UNION ALL SELECT '20140606' FROM dual ; SELECT * FROM t_holiday; DT 20140130 20140131 20140201 20140301 20140505 20140506 20140606 <리스트 2> 사용자 함수 결과 조회 WITH t AS ( SELECT 1 no, '2014/01/01 12:30' t, 2 h FROM dual UNION ALL SELECT 2, '2014/01/30 12:30', 4 FROM dual UNION ALL SELECT 3, '2014/03/04 07:30', 2 FROM dual UNION ALL SELECT 4, '2014/03/04 12