사용자 정의 함수 만들기(데이터베이스 엔진)

사용자 정의 함수는 CREATE FUNCTION 문을 사용하여 만들고, ALTER FUNCTION 문을 사용하여 수정하며, DROP FUNCTION 문을 사용하여 삭제합니다. 사용자 정의 함수의 정규화된 이름(schema_name.function_name)은 고유해야 합니다.

지침

한 문을 취소하고 모듈(트리거, 저장 프로시저 등)의 다음 문을 실행하도록 하는 Transact-SQL 오류는 함수 내부에서는 다르게 취급됩니다. 함수에서 그러한 오류가 발생하면 함수의 실행이 중단됩니다. 이에 따라 함수를 호출한 문도 취소됩니다.

BEGIN...END 블록 내에 있는 문은 어떠한 부작용도 유발하지 않습니다. 함수의 부작용으로는 데이터베이스 테이블 수정과 같은 함수 외부 범위를 갖는 리소스 상태의 영구적인 변경을 들 수 있습니다. 함수의 문에서 변경할 수 있는 것은 로컬 커서나 변수와 같은 함수의 로컬 개체 뿐입니다. 함수에서 수행할 수 없는 작업의 예로는 데이터베이스 테이블의 수정, 함수에서 로컬로 사용되지 않는 커서 작업, 전자 메일 보내기, 카탈로그 수정 시도 및 사용자에게 반환되는 결과 집합 생성 등이 있습니다.

쿼리에 지정된 함수가 실제로 실행되는 횟수는 최적화 프로그램에서 작성한 실행 계획마다 다릅니다. 예를 들면 WHERE 절의 하위 쿼리에서 호출하는 함수가 있습니다. 하위 쿼리 및 그 함수가 실행되는 횟수는 최적화 프로그램에서 선택한 액세스 경로에 따라 다릅니다.

함수의 유효한 문

함수에서 사용할 수 있는 문의 유형은 다음과 같습니다.

  • 함수에서 로컬로 사용되는 데이터 변수와 커서를 정의하는 데 사용되는 DECLARE 문
  • SET을 사용하여 스칼라 및 테이블 로컬 변수에 값을 할당하는 것과 같이 함수의 로컬 개체에 값 할당
  • 함수에서 커서 선언, 열기, 닫기, 할당 취소 등 로컬 커서를 참조하는 커서 작업. 클라이언트에 데이터를 반환하는 FETCH 문은 사용할 수 없습니다. INTO 절을 사용하여 로컬 변수에 값을 할당하는 FETCH 문만 사용할 수 있습니다.
  • TRY...CATCH 문을 제외한 흐름 제어 문
  • 함수에서 로컬로 사용되는 변수에 값을 할당하는 식이 있는 선택 목록이 포함된 SELECT 문
  • 함수에서 로컬로 사용되는 테이블 변수를 수정하는 UPDATE, INSERT 및 DELETE 문
  • 확장 저장 프로시저를 호출하는 EXECUTE 문

기본 제공 시스템 함수

SQL Server 2005에서는 Transact-SQL 사용자 정의 함수에 다음과 같은 비결정적 기본 제공 함수를 사용할 수 있습니다.

CURRENT_TIMESTAMP

@@MAX_CONNECTIONS

GET_TRANSMISSION_STATUS

@@PACK_RECEIVED

GETDATE

@@PACK_SENT

GETUTCDATE

@@PACKET_ERRORS

@@CONNECTIONS

@@TIMETICKS

@@CPU_BUSY

@@TOTAL_ERRORS

@@DBTS

@@TOTAL_READ

@@IDLE

@@TOTAL_WRITE

@@IO_BUSY

 

다음과 같은 비결정적 기본 제공 함수는 Transact-SQL 사용자 정의 함수에 사용할 수 없습니다.

NEWID

RAND

NEWSEQUENTIALID

TEXTPTR

결정적 및 비결정적 기본 제공 시스템 함수 목록은 결정적 함수 및 비결정적 함수를 참조하십시오.

스키마 바운드 함수

CREATE FUNCTION에서는 테이블, 뷰, 다른 사용자 정의 함수와 같은 참조하는 개체의 스키마에 함수를 바인드하는 SCHEMABINDING 절을 지원합니다. 스키마 바운드 함수에서 참조하는 개체는 변경하거나 삭제할 수 없습니다.

CREATE FUNCTION에서 SCHEMABINDING 절을 지정하려면 먼저 다음 조건이 만족되어야 합니다.

  • 함수에서 참조하는 모든 뷰와 사용자 정의 함수도 스키마 바운드이어야 합니다.
  • 함수에서 참조하는 모든 개체가 함수와 같은 데이터베이스에 있어야 합니다. 개체는 한 부분 또는 두 부분으로 된 이름을 사용하여 참조해야 합니다.
  • 함수에서 참조하는 모든 개체(테이블, 뷰, 사용자 정의 함수)에 대해 REFERENCES 권한이 있어야 합니다.

ALTER FUNCTION을 사용하여 스키마 바인딩을 제거할 수 있습니다. ALTER FUNCTION 문에서 WITH SCHEMABINDING 절 없이 함수를 다시 정의해야 합니다.

매개 변수 지정

사용자 정의 함수에서는 0이나 더 많은 입력 매개 변수를 사용하고 스칼라 값 또는 테이블을 반환합니다. 하나의 함수에 최대 1024개의 입력 매개 변수를 지정할 수 있습니다. 함수의 매개 변수에 기본값이 지정되면 기본값을 가져오는 함수를 호출할 때 DEFAULT 키워드를 지정해야 합니다. 이 동작은 매개 변수 생략이 기본값을 의미하기도 하는 사용자 정의 저장 프로시저의 기본값이 있는 매개 변수와 다릅니다. 사용자 정의 함수는 출력 매개 변수를 지원하지 않습니다.

참고 항목

개념

CLR 함수 만들기
사용자 정의 집계 만들기
사용자 정의 함수 실행(데이터베이스 엔진)
사용자 정의 함수 보기

관련 자료

CREATE FUNCTION(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기