본문으로 건너뛰기

사용자 정의 함수

개념​

  • 저장 프로시저와 조금 비슷해 보이지만,
    일반적인 프로그래밍 언어에서 사용되는 함수와 같이 복잡한 프로그래밍이 가능함

  • 함수는 RETURN문에 의해서 특정 값을 되돌려 줌

저장 프로시저

EXEC에 의해서 실행됨

함수

SELECT문에 포함되어 실행됨
(예외도 있음)



생성 / 수정 / 삭제​

스칼라함수 정의 형식
CREATE FUNCTION [ schema_name. ] function_name
(
[
{ @parameter_name [ AS ][ type_schema_name. ]
parameter_data_type
[ = default ][ READONLY ]}
[,...n]
]
)
RETURNS return_data_type
[ WITH <function_option> [,...n] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
사용된 함수
CREATE FUNCTION ufn_getAge(@byear INT)
RETURNS INT
AS
BEGIN
DECLARE @age INT
SET @age = YEAR(GETDATE()) - @byear
RETURN(@age)
END
GO


함수의 종류​


기본 제공 함수​

SQL Server가 제공해 주는 시스템 함수


사용자 정의 스칼라함수​

Return문에 의해서 하나의 값을 돌려주는 함수


사용자 정의 테이블 반환 함수​

1. 인라인 테이블 반환 함수​

  • 간단히 테이블을 돌려주는 함수로 뷰와 비슷한 역할
CREATE FUNCTION 함수이름(매개변수)
RETURNS TABLE
AS
RETURN (
단일 SELECT 문장;
)

2. 다중문 테이블 반환 함수​

  • BEGIN ... END로 정의되며 그 내부에 일련의 T-SQL을 이용해서
    반환될 테이블에 행 값을 Insert하는 형식을 가짐
CREATE FUNCTION 함수이름 (매개변수)
RETURNS @테이블변수 TABLE
( 열이름과 데이터 형식 정의... )
AS
BEGIN
위(헤더)에서 정의한 테이블에 행을 INSERT 시키는 작업들...
RETURN;
END




그 외 함수와 관련된사항​


스키마 바운드 함수​

함수에서 참조하는 테이블, 뷰 등이 수정되지 못하도록 설정한 함수

  • 옵션에 WITH SCHEMABINDING을 사용하여 생성함

테이블 변수​

  • 일반적인 변수의 선언처럼 테이블 변수도 선언해서 사용함
  • 테이블 변수의 용도는 주로 임시테이블의 용도와 비슷하게 사용됨

사용자 정의 함수의 제약 사항​

  • 함수 내부에 TRY ... CATCH문을 사용할 수 없음
  • 함수 내부에 CREATE / ALTER / DROP문을 사용할 수 없음
  • 오류가 발생하면 즉시 함수의 실행이 멈추고 값을 반환하지 않음
스칼라함수, 스키마 바운드 함수 및 테이블 변수
DECLARE @tblVar TABLE (
id char(8),
name nvarchar(10),
addr nchar(2)
);

INSERT INTO @tblVAr
SELECT userID, name, addr
FROM userTbl
WHERE birthYear >= 1970;

SELECT * FROM @tblVar;