SQL 기초

SQL 기초(사용자 정의함수)

class="song" 2023. 12. 5.
728x90

어떠한 언어이던 함수는 코드의 재사용, 가독성 증가등을 위해 자주 사용한다.

이번엔 sql에서 함수를 제작해서 사용하는 방법을 정리해 보려고 한다.

 

데이터에 성별이 저장되어 있지 않을 때, 성별을 추출하기 위해 주민번호 뒷자리를 이용해 남성 / 여성을 추출하는 함수를 정의

-- 함수 구문 시작
delimiter //

-- 사용자 정의 함수
CREATE FUNCTION udfGetMenWomen(paramNum int)

-- 리턴 타입 정의
RETURNS varchar(4)

-- 함수기능 시작
BEGIN 
	-- 반환할 변수 선언
	DECLARE RESULT varchar(4);

-- 남여 구분을 위한 조건문 처리
	IF mod(substring(paramNum, 1, 1) ,2) = 0 THEN
		SET RESULT = '여성';
	ELSE 
		SET RESULT = '남성';
    -- if구문 종료
	END IF ;
	-- 기능 수행 후, 값 리턴
	RETURN RESULT ;
-- 함수기능 종료
END //
-- 함수 구문 종료
delimiter ;

우선 sql에서 함수를 생성할 때 함수구문의 시작과 끝을 알리는 delimiter를 사용한다.

delimiter의 역할은 구문 문자로 다른 프로그램의 ;(세미콜론)같은 기능을 수행한다.

 

하지만 sql문에서 서버로 쿼리문을 그냥 보내게 되면 ;로 구분되어져 있는 쿼리문을 각각 쪼개서 인식하게 되어

서버에서 인식하지 못하는 문제가 발생한다.

 

이때 delimiter를 일시적으로 재정의하여 구분자를 다른 기호 등으로 변경하여 사용한다.

이렇게 되면 서버에서 ;을 사용하여 코드를 구분할 때에도 하나의 구문으로 인식할 수 있게 된다.

 

;를 // 로 변경하여 함수 구문을 시작하였다.

 

그런 후, 사용자 정의 함수를 생성하기 위해 함수의 이름을 정의하고, 매개변수와 데이터 타입을 넣어주었다.

이때 Create function를 작성해 함수를 생성해주었다.

 

그런뒤 리턴될 데이터의 타입을 정의해준다.

데이터 타입은 varchar로 설정하고 길이를 4로 정의했다.

DECLARE 명령어를 사용하여 변수를 정의하였는데 이름은 result로 하였다.

 

BEGIN으로 함수의 기능을 시작할수 있다.

남녀의 구분을 위해 주민번호 뒷자리를 substring함수를 사용해 첫번째 자리를 추출하고, mod 함수를 사용해 2로 나누었을때 나머지가 0이라면 여성 아닐때 남성으로 구분하였다.

구분된 데이터를 set을 사용하여 result라는 변수에 담고, if문을 종료하기위해 end if라는 명령문을 작성하였다.

 

그런뒤 result를 리턴해주고, end//로 함수기능 구문을 종료하였다.

이때 delimiter를 재정의 한 // 를 사용하여 한 구문이 끝났다는것을 서버에 전달할수있다.

 

함수의 기능을 다 작성하였다면,

마지막에 delimiter를 다시 ;로 재정의 하여 함수생성 구문을 종료해주었다.

 

이처럼 sql에서 사용자 지정함수를 만들어 사용할수 있다.

함수를 만들어 사용하면 코드의 재사용을 할수 있어, 똑같은 기능을 하는 코드를 여러번 쓰지 않아도 된다.

 

 

 

 

 

 

 

 

728x90

'SQL 기초' 카테고리의 다른 글

SQL기초 프로시저(Stored Procedure)  (2) 2023.12.06
SQL기초 (view)  (1) 2023.12.05
SQL 기초(union)  (1) 2023.12.04
SQL 기초 (EXISTS)  (2) 2023.12.04
SQL 기초(4) 함수들  (0) 2023.11.28

댓글