SQLD, ECLIPS, JAVA,PYTHON, NODE....

[Oracle] PL/SQL Class 5 - 과제 본문

PLSQL

[Oracle] PL/SQL Class 5 - 과제

D_Aiden 2023. 11. 13. 17:08
728x90
반응형
SMALL

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;
/

 

728x90
반응형
LIST