Database/MySQL
[MySQL] function
StoneSeller
2023. 3. 22. 14:04
procedure과 비슷한 용도인 function이 있다.
- procedure : 긴 쿼리문을 재사용하고 싶을 때
- function : 간단한 쿼리문(사칙연산 등)을 재사용하고 싶을 때
procedure과 function의 차이점
- procedure은 CALL 문법과 함께 호출해야하나 function은 CALL이 필요없다.
- procedure은 RETURN이 필요없지만 function은 필요하다.
- function안에서는 SELECT문법으로 테이블 값을 출력할 수 없다.
- DETERMINISTIC 사용 이유
- DETERMINISTIC으로 생성시, MySQL에서 이 함수가 입력값이 동일하면 출력값은 항상 동일하다는 것을 인지하고 단 1번만 이 함수를 호출해서 결과값으로 a컬럼을 검색한다.
⇒ 속도 측면에서 빠르다! - default는 NOT DETERMINISTIC
- DETERMINISTIC으로 생성시, MySQL에서 이 함수가 입력값이 동일하면 출력값은 항상 동일하다는 것을 인지하고 단 1번만 이 함수를 호출해서 결과값으로 a컬럼을 검색한다.
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