SELECT 사원번호,
AVG_AMT_FUNC(사원번호),
AVG_AMT_FUNC(사원번호) * DECODE (직무,'A1',0.12,0.11),
기본급 / AVG_AMT_FUNC(사원번호)
FROM 사원
WHERE 부서코드 = '1110' ;
1) 인라인뷰 내에서 한번만 저장형 함수를 기술하고 메인 SELECT-LIST에서 그 결과를 반복수행 SQL구문
SELECT 사원번호,
AVG_AMT,
AVG_AMT * DECODE (직무,'A1',0.12,0.11),
기본급 / AVG_AMT
FROM ( SELECT 사번, AVG_AMT_FUNC(사번) AVG_AMT
FROM 사원
WHERE 부서코드 = '1110' ) ;
2) 별도의 집합을 만드는 형태의 SQL구문
SELECT 사원번호,
AVG_AMT, AVG_AMT * DECODE (직무,'A1',0.12,0.11),
기본급 / AVG_AMT
FROM ( SELECT 사번, AVG_AMT_FUNC(사번) AVG_AMT
FROM 사원
WHERE 부서코드 = '1110'
GROUP BY 사원번호 ) ;
3) 별도의 집합을 만드는 형태의 SQL구문중 (GROUP BY가 부담이 되는 경우)
1) 컬럼 값들을 결합(Concatenation)하여 하나의 상수값으로 만들어 리턴한 후 다시 분할하여 최종출력시키는 방법의 SQL 구문
CREATE or REPLACE FUNCTION AVG_MAX_AMT_FUNC
(v_empno varchar2)
RETURN varchar2 IS
V_avg_amt varchar2(30);
BEGIN
SELECT RPAD(avg(급여총액),15) ||RPAD(max(급여총액),15) into v_avg_amt
FROM 급여
WHERE 사원번호 = v_empno
and 년월 between '199801' and '199803' ;
RETURN v_avg_amt;
END AVG_MAX_AMT_FUNC;
SELECT 사원번호,성명,substr(AMT,1,15), substr(AMT,16,15)
FROM (SELECT 사원번호,성명,
AVG_MAX_AMT_FUNC(사원번호) AMT
FROM 사원
WHERE 부서코드 = '1120') ;
SELECT 직무, 평균급여, 인원수, 최대기대급, 최대기대급/평균급여 * 100
FROM ( SELECT 직무, AVG_AMT_FUNC(사원번호) 평균급여,
count(*) 인원수,
max(기본급) 최대기본급
FROM 사원
WHERE 부서코드 = '1120'
GROUP BY 직무, AVG_AMT_FUNC(사원번호));
SELECT 직무,
AVG_MAX_AMT_FUNC(사원번호),
count(*),
max(기본급),
max(기본급) / AVG_AMT_FUNC(사원번호) * 100
FROM 사원
WHERE 부서코드 = '1120';
GROUP BY 직무, AVG_AMT_FUNC(사원번호);