본문 바로가기
MS SQL

MS SQL_사용자 정의 함수 사용법

by 디디찐 2022. 8. 2.
반응형

1. 사용자 정의 함수

개발자가 직접 정의하여 사용할 수 있는 함수 

2 사용자 정의 함수 종류

- 스칼라반환함수: RETURN 문에서 하나의 단일값을 반환하는 함수
- 테이블반환함수: RETURN 값이 반환값이 테이블인 함수 (인라인 / 다중문)

3. 사용자 정의 함수 생성

- 스칼라반환함수 사용법

CREATE FUNCTION 함수명(
@매개변수1  타입,
@매개변수 2 타입,
,,,
)
RETURNS 타입
AS
BEGIN 
	RETURN
END

- 테이블반환함수사용법

  •  인라인 테이블 반환함수:  단일 SELECT 문장
CREATE FUNCTION 함수이름(매개변수)
    RETURN TABLE
AS
RETURN(
    단일 SELECT 문장
)
GO
  •   다중문 테이블 반환함수:  행을 INSERT 시키는 문장
CREATE FUNCTION 함수이름(매개변수)
    RETURNS @테이블변수 TABLE
    (컬럼명 타입 정의,
    ,,,
    )
AS
BEGIN
    INSERT 작업문
    RETURN
END

다중문 테이블 반환함수 예제 - 문자열 구분자로 구분하여 INSERT

CREATE FUNCTION [dbo].[FNC_SPLIT]( 
	@STRING   NVARCHAR(MAX), -- 문자열
	@SEPARATOR  NVARCHAR(10) -- 문자열 구분자
)
RETURNS @RTN 
	TABLE ( NUM INT, VAL NVARCHAR(MAX) )
AS 
BEGIN
	DECLARE  @START INT = 1, @IDX  INT = 1, @NUM INT = 0, @TMP NVARCHAR(MAX)
	WHILE(@IDX > 0) 
		BEGIN 
			SET @IDX = CHARINDEX(@SEPARATOR, @STRING, @START) 
			IF @IDX = 0 
				BEGIN
					SET @TMP = RIGHT(@STRING, LEN(@STRING) - @START + 1)
				END 
			ELSE 
				BEGIN
					SET @TMP = SUBSTRING(@STRING, @START, @IDX - @START)
				END
			IF LEN(@TMP) > 0 
				BEGIN
					INSERT INTO @RTN
					VALUES ( @NUM, RTRIM(LTRIM(@TMP)) )
				END
			SET @START = @IDX + 1
			SET @NUM = @NUM + 1
		END
	RETURN 
END
  • CHARINDEX(): 문자열에서 지정학 식의 시작 위치를 반환
  • CHARINDEX('찾을문자열A','지정문자열B',검색 시작할 위치 INDEX)
  • LEN() : 문자열 길이
  • LTRIM()  / RTRIM(): 문자열의 왼쪽 / 오른쪽에 있는 공백 제거

함수 실행 결과

-- 함수 실행 결과를 담을 테이블
CREATE TABLE Alphabet(
    RESULT    VARCHAR(5),
    INS_DATE  DATE
)

--실행예시
DECLARE @ALPHABET  VARCHAR(200)
SET @ALPHABET = 'A|B|C|D' 

INSERT INTO Alphabet(RESULT, INS_DATE)
SELECT VAL, GETDATE() FROM DBO.FNC_SPLIT (@ALPHABET, '|')

 

4. 사용자 정의 함수 수정

ALTER FUNCTION 함수명

5. 사용자 정의 함수 삭제

 

DROP FUNCTION [함수명]

6. 사용자 정의 함수 실행

SELECT 함수명('매개변수')

 

반응형

'MS SQL' 카테고리의 다른 글

MS SQL_PIVOT 사용법  (0) 2022.08.03
MS SQL_PARTION사용법  (0) 2022.08.02
MS SQL_프로시저 사용법  (0) 2022.08.01
MS SQL_페이징처리3/TOP()사용법  (0) 2022.07.31
MS SQL_페이징처리2/ROW_NUMBER 사용법  (0) 2022.07.31