다연이네

[days15] Stored Function (저장함수) 본문

Oracle

[days15] Stored Function (저장함수)

 다연  2020. 11. 18. 22:09
반응형

PL/SQL의 stored function 
PL/SQL 언어 중에서 Stored function은 Stored procedure와 개념이 동일하며, 동일한 기능을 가지고 있다.
한가지 차이점은 stored procedure는 로직을 처리만 하고 끝내지만, 
stored function은 그 처리 결과를 사용자에게 반환하는 기능을 가지고 있는 점이 다르다.

==저장 함수 : 반환값이 있는 저장 프로시저라고 생각

 

create or replace function 함수명 
()
return 리턴자료형;
is 
begin

    return (리턴값); --괄호 해도되고 안해도되고
exception
end;

 

주민번호를 입력받아 성별을 반환하는 함수

create or replace function uf_Gender
(
    prrn varchar2
)
return varchar2
is 
    vgender varchar2(6) := '여자'; --남자 여자를 담을 변수
begin
    if mod(substr(prrn,8,1),2)=1 then
        vgender := '남자';
    end if;
    return vgender;
--exception
end;
-- Function UF_GENDER이(가) 컴파일되었습니다.


--남자 여자 출력하기
select name ,ssn, scott.uf_Gender(ssn) gender
from insa;

 

 

n 정수를 파라미터로 해서 1~n 합을 구해 반환하는 저장 함수

create or replace function uf_sum
( 
    pn number
)
return number
is
    vsum number := 0;
    vmin number :=1;
    vmax number := pn;
begin
    if pn < 1 then --음수인 경우
    vmax:=1;
    vmin:=pn;
    end if;
    for i in vmin..vmax
    loop
        vsum := vsum+i;
    end loop;

    return vsum;
--exception
end;

select scott.uf_sum(10)
from dual;


select scott.uf_sum(-10)
from dual;

매개변수 10
매개변수 -10

 

uf_birth 주민번호를 매개변수로 해서 '2000.12.12 월요일'반환

create or replace function uf_birth
(
prrn varchar2
)
return varchar2

is
vbirthday varchar2(20);
vrrn06 varchar2(6);
vgender number(1);
vcentury varchar2(20);

begin 
vrrn06 := substr(prrn, 0,6);
vgender := substr(prrn, 8,1);
vcentury :=case
               when vgender in (1,2,5,6) then 19
               when vgender in (3,4,7,8) then 20
               else 18
           end;
vbirthday := to_char(to_date(concat(vcentury, vrrn06)), 'YYYY.MM.dd DAY');
return vbirthday;

--exception
end;

select name ,scott.uf_birth(ssn)
from insa;

 

반응형
Comments