새소식

Database/MySQL

[MySQL] function

  • -

procedure과 비슷한 용도인 function이 있다.

  • procedure : 긴 쿼리문을 재사용하고 싶을 때
  • function : 간단한 쿼리문(사칙연산 등)을 재사용하고 싶을 때

 

procedure과 function의 차이점

  • procedure은 CALL 문법과 함께 호출해야하나 function은 CALL이 필요없다.
  • procedure은 RETURN이 필요없지만 function은 필요하다.
  • function안에서는 SELECT문법으로 테이블 값을 출력할 수 없다.
  • DETERMINISTIC 사용 이유
    • DETERMINISTIC으로 생성시, MySQL에서 이 함수가 입력값이 동일하면 출력값은 항상 동일하다는 것을 인지하고 단 1번만 이 함수를 호출해서 결과값으로 a컬럼을 검색한다.
      ⇒ 속도 측면에서 빠르다!
    • default는 NOT DETERMINISTIC
CREATE FUNCTION DB명.함수이름(변수 변수데이터타입)
RETURNS 반환값데이터타입
DETERMINISTIC
BEGIN
    RETURN 반환할 수식/값;
END

 

 

 

"원"을 "엔"으로 계산하는 수식을 자주 사용하기 위해 function으로 만들고 싶다.

DROP FUNCTION IF EXISTS mart.yen;

delimiter $$
$$
CREATE FUNCTION mart.yen(won int)
RETURNS int
DETERMINISTIC
BEGIN
	RETURN won * 0.1 + 50;
END
$$
delimiter ;

 

SELECT yen(가격) FROM mart.product;

 

 

 

 

 

5000원 이상이면 무료배송, 5000원 미만이면 3000원의 배송비를 붙여서 계산하고 싶다.

SELECT IF(가격 >=5000, 가격, 가격 + 3000) FROM mart.product;

 

자주 사용할 것 같으니 function으로 만들어도 괜찮을 것 같다.

delimiter $$
$$
CREATE FUNCTION fee(cost int)
RETURNS int
DETERMINISTIC
BEGIN
	RETURN if(cost >= 5000, cost, cost + 3000);
END
$$
delimiter ;

 

SELECT fee(가격) FROM mart.product;

 

 

 

 

 

728x90
Contents