본문 바로가기

수업

2024-03-28-오전:내장함수

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 '출력결과';