본문 바로가기

DataBase/SQL

MariaDB/Mysql) 스토어드 함수(Stored Function) 작성하기

이번 포스팅은 Stored Function에 대해서 알아보겠습니다.

 

Stored Function은 특정 값을 구해야할때 사용하면 유용합니다.

Stored Procedure와의 차이점은 직접 반환하는 값이 존재한다는 것!

그리고 CALL [PROCEDURE NAME]; 형태가 아닌 SELECT, INSERT 등 다른 목적의 쿼리들과 함께 사용할 수 있습니다.

 

형태

DROP FUNCTION IF EXISTS [FUNCTION NAME];
DELIMITER $$
CREATE FUNCTION [FUNCTION NAME]([ARGUMENTS])
	RETURNS [RETURN TYPE]
BEGIN
	DECLARE [VARIABLE] [RETURN TYPE];
	RETURN [VARIABLE];
END $$
DELIMITER ;

DROP FUNCTION IF EXISTS 는 만약 해당하는 스토어드 함수가 존재하면 없애라는 명령어입니다.

BEGIN이전에는 반환하는 데이터 타입을 명시해 줄 수 있습니다.

BEGIN부터 로직을 작성할 수 있고, DECLARE 키워드 다음에는 함수에서 사용하는 변수를 선언해줄 수 있어요.

 

예시

DROP FUNCTION IF EXISTS getID_Seq;
DELIMITER $$
CREATE FUNCTION getID_Seq( CATEG VARCHAR(30))
	RETURNS INT
BEGIN
	DECLARE num INT;
	DECLARE cd VARCHAR(30);
	SET cd = 'NULL';
	SET num = -1;
	SELECT CT.CODE INTO cd FROM TB_CATEG CT
	WHERE CT.CATEGORY = CATEG;
	IF(cd != 'NULL') THEN
		SELECT SEQ INTO num FROM TB_IDEA ID 
		INNER JOIN TB_CATEG CT
		ON ID.CT_CODE = CT.CODE
		WHERE CT.CATEGORY = CATEG ORDER BY SEQ DESC LIMIT 1;
		IF (num != -1) THEN
			SET num = num + 1;
		ELSE
			SET num = 1;
		END IF;
	ELSE
		SET num = -1;
	END IF;
	RETURN num;
END $$
DELIMITER ;

카테고리를 받아서 해당하는 게시판의 가장 최근 번호 + 1을 반환해주는 스토어드 함수입니다~

 

SELECT getID_Seq('카테고리명')으로 입력하면 해당 카테고리에 유니크한 게시물 번호가 나오게 됩니다.

 

물론 에러처리도 시켜줘야하는데요! 이것에 대해선 다음에 다루는 시간을 갖겠습니다. 요즘 바빠요 ㅜㅜ

'DataBase > SQL' 카테고리의 다른 글

MYSQL) 게시판 꿀팁! LIMIT, OFFSET 키워드  (0) 2019.07.28
MYSQL ) 테이블 수정하기 Alter table  (0) 2019.07.26