본문으로 건너뛰기

사용자 정의 함수

개념

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

  • 함수는 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;