Kosta DevOps 과정 280기/Java
사용자 정의 함수(function)만드는 방법
by 롯슈83
2024. 6. 25.
- 오라클이 제공하는 함수들은 많이 있다.
- ceil, substr, sum, max, min, count, ...
- 이러한 함수들은 모두 select 절에 사용할 수 있다. 이것들처럼 사용자가 select 절에 사용할 수 있는 사용자가 필요한 함수를 만들 수 있다.
- 사용자 정의 함수(function)
- select 절에 사용되어야 하니 반드시 반환값이 있다.
- 만드는 방법
create or replace function 함수이름(매개변수명 자료형) return 자료형
is
변수선언
begin
함수가 해야할 문장(들)
return 값;
end;
/
-- 판매금액을 매개변수로 전달받아 이익금을 반환하는 함수를 만들어봅시다.
-- 판매금액이 30000원이상이면 10% 그렇지 않으면 5%가 이익금입니다.
create or replace function salePlus(pr number)
return number
is
plus number;
begin
if pr >= 30000 then
plus := plus + pr*0.1;
else
plus := plus + pr * 0.05;
end if;
return plus;
end;
/
-- 각 주문에 대하여 주문번호, 판매금액, 이익금 출력
select orderid,saleprice, margin(saleprice) from orders;
-- 오늘 날짜에 판매된 주문에 대한 주문번호, 도서번호, 도서명, 고객명, 이익금을 출력
select orderid, bookid, (
select bookname from book b
where b.bookid = o.bookid
) bookname, (
select name from customer c
where c.custid = o.custid
) name, margin(saleprice) from orders o
where to_char(orderdate, 'yyyy/mm/dd') = to_char(sysdate, 'yyyy/mm/dd');
-- 고객 번호를 매개변수로 전달받아 그 고객의 총 주문액을 게산하여 주문총액이 20000원 이상이면 "우수"
-- 그렇지 않으면 "보통"을 반환하는 grade 함수를 만들고 호출해봅니다.
create or replace function customerMember(Mcustid number)
return varchar2
is
total number;
mem varchar2(20);
begin
select sum(saleprice) into total from orders where custid = Mcustid;
if total >= 20000 then mem := '우수';
else mem := '보통';
end if;
return mem;
end;
/
select name, customerMember(custid) from customer;
-- 고객의 주소를 매개변수로 전달 받아 국내에 거주하면 '국내거주' 그렇지 않으면 '국외거주'를 반환하는 함수를 만들고 호출해라
create or replace function inOutPlace(pos varchar2)
return varchar2
is
result varchar2(20);
begin
if pos like '%대한민국%' then result := '국내거주';
else result := '국외거주';
end if;
return result;
end;
/
select name, address,inOutPlace(address) from customer;