사용자 정의 함수란?
- 형태는 저장 프로시저와 비슷해 보이지만, 일반적인 프로그래밍 언어에서 사용되는 함수와 비슷한 개념이다.
- RETURN 문에 의해서 특정 값을 반환하는 기능을 한다.
- 함수를 호출할 때 스키마 이름을 지정하지 않아 디폴트 스키마인 경우에도 'dbo.'을 붙여서 호출해야한다.
사용자 정의 함수의 생성 / 수정 / 삭제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | --Transact-SQL Scalar Function Syntax 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 [ ; ] | cs |
다양한 사용 예시
(1) 출생년도를 입력하면 나이가 출력되는 함수
- 생성
1 2 3 4 5 6 7 8 9 | CREATE FUNCTION ufn_getAge(@byear INT) -- 매개 변수를 정수로 받음 RETURNS INT -- 리턴값은 정수형 AS BEGIN DECLARE @age INT SET @age = YEAR(GETDATE()) - @byear + 1 RETURN(@age) END GO | cs |
- 함수 호출 방법 1 ( SELECT문 사용)
1 | SELECT dbo.ufn_getAge(1991); -- 호출시 스키마명을 붙여줘야 함 | cs |
- 결과
- 함수 호출 방법 2 ( EXECUTE문 사용 )
1 2 3 | DECLARE @retVar INT; EXEC @retVar = dbo.ufn_getAge 1991; PRINT @retVar; | cs |
- 결과
(2) 함수 수정 (만나이를 출력하도록 수정)
1 2 3 4 5 6 7 8 9 | ALTER FUNCTION ufn_getAge(@byear INT) RETURNS INT AS BEGIN DECLARE @age INT SET @age = YEAR(GETDATE()) - @byear RETURN(@age) END GO | cs |
(3) 함수 삭제
1 | DROP FUNCTION ufn_getAge; | cs |
사용자 정의 함수의 제약 사항
- 내부에 TRY … CATCH 문을 사용할 수 없다.
- 내부에 CREATE / ALTER / DROP과 같은 DDL을 사용할 수 없다.
- 오류가 발생하면 즉시 함수의 실행이 멈추고 값을 반환하지 않는다.
참고문헌
우재남, 『뇌를 자극하는 SQL Server 2012』 한빛미디어 (2013-03-02 초판발행)
'DEV LOGS' 카테고리의 다른 글
[MSSQL] 스키마 바운드 함수 (0) | 2018.07.10 |
---|---|
[MSSQL] 사용자 정의 함수의 종류 (0) | 2018.07.10 |
[MSSQL] 저장 프로시저(Stored Procedure)의 문제점 (0) | 2018.07.10 |
[MSSQL] T-SQL(Transact SQL) VS Stored Procedure (0) | 2018.07.10 |
[MSSQL] 저장 프로시저 특징과 종류 (0) | 2018.07.09 |