이번 포스팅은 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 |