1. Stored Function(내장함수)
사용자가 직업 만드는 함수
함수
IN, OUT 없고 무조건 입력 파라미터
RETURNS:반환 값의 데이터 형식을 지정.
RETURN:본문에서 return문으로 하나의 값을 반환.
-- 1. 두 수의 합을 구하는 함수
delimiter $$
CREATE FUNCTION sf_sum_number(num_1 INT,num_2 INT)
RETURNS INT -- 반환할 값의 데이터 타입 지정
BEGIN
DECLARE myResult INT;
SET myResult:=(num_1+num_2); -- := 변수의 값을 할당할때 사용
RETURN myResult;
END $$
delimiter ;
SELECT sf_sum_number(5,23) AS '두 수의 합';
-- 2. 회원의 이름을 입력했을때, 이메일을 조회하는 함수
-- 조회 결과가 없을 때, '조회 결과가 없습니다.' 라고 출력
DROP FUNCTION if EXISTS sf_print_email;
delimiter $$
CREATE FUNCTION sf_print_email(input_name VARCHAR(100))
RETURNS VARCHAR(100)
BEGIN
DECLARE myEmail VARCHAR(100);
select
m.m_email INTO myEmail
from
tb_member AS m
where
m.m_name=input_name;
if myEmail IS NULL
then SET myEmail:='조회 결과가 없습니다.';
END if;
RETURN myEmail;
END $$
delimiter ;
SELECT sf_print_email('홍011') AS '이메일';
-- 3. 판매자의 아이디를 입력받아 취급 상품 목록을 출력하는 함수 작성
-- 출력 결과는 한 줄로 조회되도록.
DROP FUNCTION if EXISTS sf_seller_goods_list;
delimiter $$
CREATE FUNCTION sf_seller_goods_list(sellerId VARCHAR(100))
RETURNS VARCHAR(100)
BEGIN
DECLARE goodsList VARCHAR(100);
SELECT
GROUP_CONCAT(distinct g.g_name SEPARATOR ', ') INTO goodsList
FROM
tb_goods AS g
WHERE
g.g_seller_id=sellerId;
IF goodsList IS NULL
THEN SET goodsList:='판매하고 있는 상품이 없습니다.';
END IF;
RETURN goodsList;
END $$
delimiter ;
SELECT sf_seller_goods_list('id006') AS '취급 상품 목록';
SELECT sf_seller_goods_list('id066') AS '취급 상품 목록';
-- 4. 도시 이름을 입력하면 도시 이름, 나라 이름, 인구수 출력하는 함수생성
DROP FUNCTION if EXISTS sf_city_info;
delimiter $$
CREATE FUNCTION sf_city_info(city_name VARCHAR(50))
RETURNS VARCHAR(100)
BEGIN
DECLARE city_info VARCHAR(100);
SELECT
Lower(CONCAT('city name :',c.Name,', country name:',c.CountryCode,', city pop:',CAST(c.Population AS CHAR))) INTO city_info
FROM
city AS c
WHERE
c.Name=city_name;
IF city_info IS NULL
THEN SET city_info:='일치하는 도시가 없습니다.';
END IF;
RETURN city_info;
END $$
delimiter ;
SELECT sf_city_info('seoul') AS '출력결과';
SELECT sf_city_info('서울') AS '출력결과';