Content deleted Content added
RevRagnarok (talk | contribs) m Revert to revision 86817872 dated 2006-11-09 22:54:59 by Chriscf using popups |
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 |
||
(135 intermediate revisions by 93 users not shown) | |||
Line 1:
A '''user-defined function''' ('''UDF''') is a [[function (programming)|function]] provided by the user of a program or environment, in a context where the usual assumption is that functions are built into the program or environment. UDFs are usually written for the requirement of its creator.
==BASIC language==
In some old implementations of the [[BASIC]] programming language, user-defined functions are defined using the "DEF FN" syntax. More modern dialects of BASIC are influenced by the [[structured programming]] paradigm, where most or all of the code is written as user-defined functions or procedures, and the concept becomes practically redundant.
==COBOL language==
In the [[COBOL]] programming language, a user-defined function is an entity that is defined by the user by specifying a FUNCTION-ID paragraph. A user-defined function must return a value by specifying the RETURNING phrase of the procedure division header and they are invoked using the function-identifier syntax. See the ISO/IEC 1989:2014 Programming Language COBOL standard for details.
As of May 2022, the IBM Enterprise COBOL for [[z/OS]] 6.4 ([[IBM COBOL]]) compiler contains support for user-defined functions.
==Databases==
In [[relational database management system]]s, a user-defined function provides a mechanism for extending the functionality of the [[database server]] by adding a function, that can be evaluated in standard [[query language]] (usually [[SQL]]) statements. The [[ISO/IEC 9075|SQL standard]] distinguishes between [[Scalar (computing)|scalar]] and table functions. A scalar function returns only a single value (or [[null (SQL)|NULL]]), whereas a table function returns a (relational) table comprising zero or more rows, each row with one or more columns.
User-defined functions in SQL are declared using the <code>CREATE FUNCTION</code> statement. For example, a user-defined function that converts Celsius to Fahrenheit (a temperature scale used in USA) might be declared like this:
<syntaxhighlight lang="sql">
CREATE FUNCTION dbo.CtoF(Celsius FLOAT)
RETURNS FLOAT
RETURN (Celsius * 1.8) + 32
</syntaxhighlight>
Once created, a user-defined function may be used
<syntaxhighlight lang="sql">
SELECT Name, CtoF(BoilingPoint)
FROM Elements
</syntaxhighlight>
would retrieve the name and the boiling point from each row.
Each user-defined function carries certain properties or characteristics.
*
*
*
*
*
User-defined functions should not be confused with [[stored procedure]]s.
Some database management systems allow the creation of user defined functions in languages other than SQL.
===SQL Server 2000===
There are three types of UDF in [[Microsoft SQL Server]] 2000: [[scalar function]]s, inline table-valued functions, and multistatement table-valued functions.
Scalar functions return a single data value (not a table) with RETURNS clause. Scalar functions can use all scalar data types, with exception of timestamp and user-defined data types.
Inline table-valued functions return the [[result set]] of a single SELECT statement.
Multistatement table-valued functions return a table, which was built with many TRANSACT-SQL statements.
User-defined functions can be invoked from a query like built‑in functions such as OBJECT_ID, LEN, DATEDIFF, or can be executed through an EXECUTE statement like stored procedures.
Performance Notes:
{{olist| On Microsoft SQL Server 2000 a table-valued function which "wraps" a View may be much faster than the View itself. The following MyFunction is an example of a "function-wrapper" which runs faster than the underlying view 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>
| On Microsoft SQL Server 2005 the result of the same code execution is the opposite: view is executed faster than the "function-wrapper".}}
User-defined functions are subroutines made of one or more Transact-SQL statements that can be used to encapsulate code for reuse.
It takes zero or more arguments and evaluates a return value. Has both control-flow and DML statements in its body similar to stored procedures.
Does not allow changes to any Global Session State, like modifications to database or external resource, such as a file or network.
Does not support output parameter.
DEFAULT keyword must be specified to pass the default value of parameter.
Errors in UDF cause UDF to abort which, in turn, aborts the statement that invoked the UDF.
<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>
===Apache Hive===
[[Apache Hive]] defines, in addition to the regular user-defined functions (UDF), also user-defined aggregate functions (UDAF) and table-generating functions (UDTF).<ref>
{{cite web
|first= |last=
|url=https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
|title=LanguageManual UDF - Apache Hive - Apache Software Foundation
|website=
|publisher=
|date=26 June 2015}}
</ref> Hive enables developers to create their own custom functions with Java.<ref>
{{cite web
|first= |last=
|url=https://cwiki.apache.org/confluence/display/Hive/HivePlugins
|title=HivePlugins - Apache Hive - Apache Software Foundation
|website=
|publisher=
|date=26 June 2015}}
</ref>
===Apache Doris===
Apache Doris, an open-source real-time analytical database, allows external users to contribute their own UDFs written in C++ to it.<ref>{{cite web |title=Apache Doris UDF |url=https://doris.apache.org/docs/dev/ecosystem/udf/contribute-udf?_highlight=udf |access-date=8 April 2023 |archive-date=10 April 2023 |archive-url=https://web.archive.org/web/20230410141729/https://doris.apache.org/docs/dev/ecosystem/udf/contribute-udf/?_highlight=udf |url-status=dead }}</ref>
==References==
{{reflist}}
==External links==
*
*
*[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]
[[Category:Databases]]
[[Category:SQL]]
[[Category:Subroutines]]
|