백엔드/SQL

[SQL] User-Defined Functions (1)

leejiwoo21 2021. 12. 3. 02:49

User-Defined Functions(1)

 

SQL server에서도 사용할 함수를 직접 만들  수 있습니다.

 

Scalar Function

: 여러줄의 statement를 사용할 땐 BEGIN...END로 블록을 설정하고, 결과로 하나의 값을 반환하는 함수입니다.

 

Table-Valued Function

: 결과로 테이블 타입의 값을 반환하는 함수입니다.

 

 

 

함수 생성 및 수정

 

CREATE FUNCTION : 함수를 생성할 때 사용하는 구문입니다.

ALTER FUNCTION : 함수를 수정할 때 사용하는 구문입니다.

 

[]안에 있는 내용은 선택사항

 

Scalar Function 문법

CREATE [ or ALTER ] FUNCTION [스키마 이름] 함수이름

( [ { 인자이름 [AS] [스카마이름] 인자타입

[ = default ] [READONLY] } -- 디폴트값을 설정할 수 있다. READONLY는 인자의 수정이 불가능하게 합니다.

[ ,...n] ]  // 여러개의 인자를 받을 수 있음

)

RETURNS 반환데이터타입

[ WITH < function_option> [ ,...n] ]

[AS]
	BEGIN
    	함수 몸통 // function_body
        RETURN scalar_expression -- 스칼라값 반환
    END[;]

함수 생성

예시)

create function getSum(@a int, @b int, @c int)
returns int
as
begin
	declare @d as int
	set @d = @a + @b + @c
	return @d
end
go

select dbo.getSum(3,5,7) -- 함수 실행

출력

 

 

함수 수정

예시)

alter function getSum(@a int = 10, @b int = 20, @c int= 10)
returns int
as
begin
	declare @d as int
	set @d = @a + @b + @c
	return @d
end
go

select dbo.getSum(default,5,7) -- 함수 실행

출력

 

 

 

함수 삭제 

 

문법

DROP FUNCTION {[ 스키마 이름. ] 함수이름} [,...n] -- 여러개를 한 번에 삭제할 수 있습니다.

예시)

drop function dbo.getSum

 

함수 삭제가 실패하는 경우

> 해당 함수를 참조하는 다른 함수가 있는 경우

> CHECK나 DEFAULT 제약조건에서 해당 함수를 사용하는 경우