{{위키데이터 속성 추적}}
'''사용자 정의 함수'''(user-defined function, UDF)는 일반적으로는 함수가 기본적으로 프로그램이나 환경 안에 내장되어 있다는 가정 하에 프로그램이나 환경의 사용자가 제공하는 [[함수]]이다.

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

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

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

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

<syntaxhighlight lang="sql">
SELECT Name, CtoF(BoilingPoint)
  FROM Elements
</syntaxhighlight>

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

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

<syntaxhighlight lang="tsql">
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
</syntaxhighlight>

2. 마이크로소프트 SQL 서버 2005에서 동일 코드 실행의 결과는 정반대이다: 뷰는 함수 래퍼 보다 더 빠르게 실행된다.
<syntaxhighlight lang="tsql">
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
</syntaxhighlight>

=== 아파치 하이브 ===
[[아파치 하이브]]는 정규 사용자 정의 언어(UDF)뿐 아니라 사용자 정의 집계 함수(UDAF)와 테이블 생성 함수(UDTF)도 정의한다.<ref>
{{웹 인용
|first= |last=
|url=https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
|title=LanguageManual UDF - Apache Hive - Apache Software Foundation
|work=
|publisher=
|date=26 June 2015}}
</ref> 하이브는 개발자가 자바로 사용자 정의 함수를 만들 수 있게 한다.<ref>
{{웹 인용
|first= |last=
|url=https://cwiki.apache.org/confluence/display/Hive/HivePlugins
|title=HivePlugins - Apache Hive - Apache Software Foundation
|work=
|publisher=
|date=26 June 2015}}
</ref>

== 각주 ==
{{각주}}

== 외부 링크 ==
* {{언어링크|en}} [http://msdn2.microsoft.com/en-us/library/aa258261(SQL.80).aspx Microsoft SQL Server reference for CREATE FUNCTION]
* {{언어링크|en}} [http://dev.mysql.com/doc/refman/5.5/en/adding-functions.html MySQL manual section on UDFs] {{웨이백|url=http://dev.mysql.com/doc/refman/5.5/en/adding-functions.html |date=20160821133930 }}
* {{언어링크|en}} [http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/index.jsp?topic=%2Fcom.ibm.db2.luw.sql.ref.doc%2Fdoc%2Fr0000917.html DB2 CREATE FUNCTION statement]{{깨진 링크|url=http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/index.jsp?topic=%2Fcom.ibm.db2.luw.sql.ref.doc%2Fdoc%2Fr0000917.html }}

{{전거 통제}}

[[분류:데이터베이스]]
[[분류:SQL]]
[[분류:함수 (프로그래밍)]]