사용자 정의 함수(USER DEFINED FUNCTION)

jsbak·2020년 9월 1일
0

DB

목록 보기
26/35

사용자 정의 함수(USER DEFINED FUNCTION)

  • 반환(하나) 값이 있음
  • 반환되는 위치는 함수 호출문의 위치
  • 사용형식은 PROCEDURE와 유사
  • 사용형식
CREATE [OR REPLACE] FUNCTION 함수명[(
   매개변수 IN|OUT|INOUT(모드) 타입명[:=default],
                        :
   매개변수 IN|OUT|INOUT(모드) 타입명[:=default])   
   RETURN 타입명
   IS|AS
     변수 선언부 -- number타입은 반드시 초기화
   BEGIN --반드시 하나이상의 타입이 와야함.
     RETURN 변수||수식; --실제 반환은 여기서 함.
   END;

예시) 회원번호를 입력받아 나이를 반환하는 함수를 작성하시오.

create or replace function fn_mem01(
  p_mem_id member.mem_id%type)
  return number
is
  v_age number:=0; --여기서는 반드시 초기화 해야됨 선언부
begin
  select extract(year from sysdate)-extract(year from mem_bir)
         into v_age
    from member
   where mem_id = p_mem_id;
   return v_age;
   exception when others then 
      dbms_output.put_line('오류발생 : '||SQLERRM);
      return null;  --함수에서 예외의 null반환하는것 염두해두기
end;
 ▶ 실행 
select mem_name as 회원명,
       fn_mem01(mem_id) as 나이,
       mem_job as 직업,
       mem_mileage as 마일리지
  from member
 where fn_mem01(mem_id) >= 50;


예시) 상품코드와 년도를 입력받아 매출액집계를 반환하는 함수를 작성하시오.
단, Alias는 상품코드, 상품명, 매출액합계

(얻고자 하는것)   
 select a.cart_prod as 상품코드,
        b.prod_name as 상품명,
        sum(a.cart_qty*b.prod_price) as 매출액합계
 --sum(a.cart_qty*b.prod_price)를 함수로 만들겠다.
   from cart a, prod b
  where a.cart_prod = b.prod_id
    and a.cart_no like '2005%'
  group by a.cart_prod, b.prod_name;

(함수)
 create or replace function fn_cart01(
    p_id prod.prod_id%type,
    p_year char)
    return number
 is 
    v_sum number(15):= 0; 
      -- number타입 변수는 자리수는 명시안해도 초기화는 꼭해야한다.
    v_year char(5) := p_year||'%';
 begin
    select sum(cart_qty*prod_price)
           into v_sum
      from cart, prod
     where cart_prod = prod_id
       and cart_prod = p_id
       and cart_no like v_year;
    return v_sum;
 end;
(사용)
 select prod_id as 상품코드,
        prod_name as 상품명,
        fn_cart01(prod_id,'2005') as 매출액합계
 --sum(a.cart_qty*b.prod_price)를 함수로 만들겠다.
   from prod;

profile
끄적끄적 쓰는곳

0개의 댓글