본문 바로가기
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;

'Kosta DevOps 과정 280기 > Java' 카테고리의 다른 글

웹서버  (0) 2024.07.03
웹 공부 사전 준비  (0) 2024.07.03
trigger  (0) 2024.06.24
PL/SQL  (0) 2024.06.24
index  (0) 2024.06.24