함수(Function)는 데이터베이스에서 여러 문장을 하나로 묶어 재사용할 목적으로 만들어진 객체입니다. SQL Server에서는 한 번 만들어 둔 함수를 저장해 놓고, 필요할 때마다 매개변수를 전달하고 그 결과값을 반환받아 활용할 수 있습니다.
이 글에서는 SQL Server에서 함수를 생성하고 삭제하는 방법을 구문과 예제를 통해 자세히 살펴보겠습니다.
CREATE FUNCTION(함수 생성)
기본 구문
SQL Server에서 함수를 생성하려면 다음과 같은 구문을 사용합니다.
CREATE FUNCTION [schema_name.] function_name
([@parameter [AS] [type_schema_name.] datatype
[= default] [READONLY]
, @parameter [AS] [type_schema_name.] datatype
[= default] [READONLY]]
)
RETURNS return_datatype
[WITH {ENCRYPTION
| SCHEMABINDING
| RETURNS NULL ON NULL INPUT
| CALLED ON NULL INPUT
| EXECUTE AS Clause]
[AS]
BEGIN
[declaration_section]
executable_section
RETURN return_value
END;
주요 매개변수 설명:
- schema_name: 함수가 소속된 스키마의 이름입니다.
- function_name: 생성할 함수에 부여할 이름입니다.
- @parameter: 함수에 전달되는 하나 이상의 매개변수입니다.
- type_schema_name: 매개변수 데이터 타입이 속한 스키마 이름(있는 경우)입니다.
- datatype: @parameter의 데이터 타입입니다.
- Default: @parameter에 지정되는 기본값입니다.
- READONLY: @parameter가 함수 내부에서 덮어쓰기될 수 없음을 의미합니다.
- return_datatype: 함수가 반환하는 값의 데이터 타입입니다.
- ENCRYPTION: 함수의 소스 코드가 시스템에 일반 텍스트로 저장되지 않도록 암호화합니다.
- SCHEMABINDING: 참조 대상 객체가 변경되어 함수에 영향을 주지 않도록 스키마에 바인딩합니다.
- RETURNS NULL ON NULL INPUT: 전달된 매개변수 중 하나라도 NULL이면 함수가 별도의 연산 없이 NULL을 반환합니다.
- CALLED ON NULL INPUT: 매개변수가 NULL이더라도 함수가 정상적으로 실행됩니다.
- EXECUTE AS 절: 함수를 실행할 보안 컨텍스트를 지정합니다.
- return_value: 함수가 최종적으로 반환하는 값입니다.
생성 예제
CREATE FUNCTION fuNhanvien
(@nhanvien_id INT)
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @nhanvien_name VARCHAR(50);
IF @nhanvien_id < 10
SET @nhanvien_name = 'Smith';
ELSE
SET @nhanvien_name = 'Lawrence';
RETURN @nhanvien_name;
END;
위 예제에서 만든 함수의 이름은 fuNhanvien이며, INT 데이터 타입의 @nhanvien_id 매개변수를 하나 받습니다. 이 함수는 실행 결과로 RETURNS 문에 명시된 대로 VARCHAR(50) 타입의 값을 반환합니다.
함수를 생성한 후에는 아래와 같이 SELECT 문에서 직접 호출하여 사용할 수 있습니다.
USE [test]
GO
SELECT dbo.fuNhanvien(8);
GO
DROP FUNCTION(함수 삭제)
함수를 성공적으로 생성했다 하더라도, 더 이상 사용하지 않거나 로직을 변경해야 하는 등의 이유로 데이터베이스에서 해당 함수를 제거해야 하는 경우가 발생할 수 있습니다.
기본 구문
함수를 삭제하려면 다음과 같은 구문을 사용합니다.
DROP FUNCTION function_name;
매개변수:
function_name: 삭제하고자 하는 함수의 이름입니다.
삭제 예제
DROP FUNCTION fuNhanvien;
위 명령을 실행하면 데이터베이스에서 fuNhanvien 함수가 즉시 삭제됩니다. 단, 삭제 작업은 되돌릴 수 없으므로 실행 전에 해당 함수가 다른 곳에서 참조되고 있지 않은지 반드시 확인하는 것이 좋습니다.