사용자 정의 함수

사용자 정의 함수(user-defined function, UDF)는 일반적으로는 함수가 기본적으로 프로그램이나 환경 안에 내장되어 있다는 가정 하에 프로그램이나 환경의 사용자가 제공하는 함수이다.

베이직 언어 
베이직 프로그래밍 언어의 일부 오래된 구현체에서 사용자 정의 함수는 "DEF FN" 문법을 사용하여 정의된다. 더 많은 종류의 현대의 베이직은 구조화된 프로그래밍 패러다임에 영향을 받았으며, 여기에서 코드 대부분이 사용자 정의 함수나 프로시저로 작성되어 있고, 이 개념은 실질적으로 과도하게 사용된다.

데이터베이스 
SQL 데이터베이스에서 사용자 정의 함수는 SQL 문에서 평가할 수 있는 함수를 추가함으로써 데이터베이스 서버의 기능을 확장하기 위한 장치를 제공한다. SQL 표준은 스칼라와 테이블 함수를 구별한다. 스칼라 함수는 하나의 값 또는 NULL만을 반환하지만, 테이블 함수는 각 줄이 하나 이상의 열로 된, 0개 이상의 열을 이루는 (관계형) 테이블을 반환한다.

SQL에서 사용자 정의 함수는 CREATE FUNCTION 문을 사용하여 선언된다. 이를테면, 섭씨를 화씨로 변환하는 함수는 다음과 같이 선언할 수 있다:
CREATE FUNCTION dbo.CtoF(Celsius FLOAT)
  RETURNS FLOAT
  RETURN (Celsius * 1.8) + 32

만들어진 사용자 정의 함수는 SQL 문의 식에서 사용될 수 있다. 이 쿼리는

SELECT Name, CtoF(BoilingPoint)
  FROM Elements

각 줄에서 이름과 끓는점을 가져온다. 열의 값을 화씨의 값으로 변환하기 위해 위에 선언된 CtoF 사용자 정의 함수를 호출한다.

SQL 서버 2000 
1. 다음의 MyFunction은 기반이 되는 뷰 MyView 보다 더 빠르게 수행되는 함수 래퍼의 예이다:

CREATE FUNCTION MyFunction()
    RETURNS @Tbl TABLE
    (
        StudentID              VARCHAR(255),
        SAS_StudentInstancesID INT,
        Label                  VARCHAR(255),
        Value                  MONEY,
        CMN_PersonsID          INT
    )
AS
BEGIN
    INSERT @Tbl
    (
        StudentID,
        SAS_StudentInstancesID,
        Label,
        Value,
        CMN_PersonsID
    )
    SELECT
        StudentID,
        SAS_StudentInstancesID,
        Label,
        Value,
        CMN_PersonsID
    FROM MyView -- where MyView selects (with joins) the same columns from large table(s)

    RETURN
END

2. 마이크로소프트 SQL 서버 2005에서 동일 코드 실행의 결과는 정반대이다: 뷰는 함수 래퍼 보다 더 빠르게 실행된다.
CREATE FUNCTION CubicVolume
-- Input dimensions in centimeters
(
    @CubeLength decimal(4,1),
    @CubeWidth  decimal(4,1),
    @CubeHeight decimal(4,1)
)
    RETURNS decimal(12,3)
AS
BEGIN
  RETURN(@CubeLength * @CubeWidth * @CubeHeight)
END

아파치 하이브 
아파치 하이브는 정규 사용자 정의 언어(UDF)뿐 아니라 사용자 정의 집계 함수(UDAF)와 테이블 생성 함수(UDTF)도 정의한다. 하이브는 개발자가 자바로 사용자 정의 함수를 만들 수 있게 한다.

각주

외부 링크 
  Microsoft SQL Server reference for CREATE FUNCTION
  MySQL manual section on UDFs 
  DB2 CREATE FUNCTION statement

데이터베이스
SQL
함수 (프로그래밍)