사용자 정의 함수
개념
-
저장 프로시저와 조금 비슷해 보이지만,
일반적인 프로그래밍 언어에서 사용되는 함수와 같이 복잡한 프로그래밍이 가능함 -
함수는
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;