[Oracle] PL/SQL Class 5 - 과제
1. 날짜 형태의 값을 가지고 [xx년 xx개월]형태로 기간을 반환하는 함수
--호출형태
col star format a50
col 근무기간 format a20
select saname, sapay, f_graph(sapay) star, sahire, f_gigan(sahire) 근무기간 from sawon;
create or replace function f_gigan
(v_date date)
return varchar2
is
begin
return floor(months_between(sysdate, v_sahire)/12) || '년 ' || floor(mod(months_between(sysdate, v_sahire), 12)) || '개월';
end;
/
2. 날짜에 년수, 개월수, 날수를 매개변수로 보내 더하는 함수를 생성하라
-- (입사일로부터 년 수/개월/일 을 더해서 출력하는 함수)
create or replace function add_date(
v_hire date,
year number,
month number,
day number)
return date
is
begin
return add_months(v_hire,((year*12)+month))+day;
end;
/
--입사일로부터 3년 1개월 3일 더한값 출력
--적용 예) select saname, sahire, add_date(sahire, 3, 1, 3) "심사일" from sawon;
3. 주민번호를 가지고 나이를 계산하는 함수를 생성하라.
--적용 예) select goname, gojumin, f_jumin_age(gojumin) age from gogek;
create or replace function f_jumin_age(
jumin varchar2)
return varchar2
is
cen number(2);
year number(4);
go_year number(2);
begin
cen := substr(jumin,8,1); -- 1900년생, 2000년생 구별하기 위한 데이터
year := to_char(sysdate,'yyyy'); -- 현재의 년도 구한 데이터
go_year := substr(jumin,1,2); -- 년생 구하기
if(cen = 1 or cen = 2) then
return year-(1900+go_year)||'살';
else
return year-(2000+go_year)||'살';
end if;
end;
/