DECLARE EXTERNAL FUNCTION

<< EXTERNAL FUNCTION | FB 2.5 Language Reference | ALTER EXTERNAL FUNCTION >>
<< EXTERNAL FUNCTION | FB 2.1 Language Reference | ALTER EXTERNAL FUNCTION >>
<< CREATE OR ALTER TRIGGER | FB 2.0 Language Reference | DECLARE FILTER >>

DECLARE EXTERNAL FUNCTION

Available in: DSQL, ESQL

Description

This statement makes an external function (UDF) known to the database.

Syntax

 DECLARE EXTERNAL FUNCTION localname
    [<arg_type_decl> [, <arg_type_decl> ...]]
    RETURNS {<return_type_decl> | PARAMETER 1-based_pos} [FREE_IT]
    ENTRY_POINT 'function_name' MODULE_NAME 'library_name'

 <arg_type_decl>    ::= sqltype [BY DESCRIPTOR] | CSTRING(length)
 <return_type_decl> ::= sqltype [BY {DESCRIPTOR|VALUE}] | CSTRING(length)

Restrictions: The BY DESCRIPTOR passing method is not supported in ESQL.

You may choose localname freely; this is the name by which the function will be known to your database. You may also vary the length argument of CSTRING parameters (more about CSTRINGs in the note near the end of the book).

BY DESCRIPTOR parameter passing

Available in: DSQL

Added in: 1.0

Description

Firebird introduces the possibility to pass parameters BY DESCRIPTOR; this mechanism facilitates the processing of NULLs in a meaningful way. Notice that this only works if the person who wrote the function has implemented it. Simply adding BY DESCRIPTOR to an existing declaration does not make it work – on the contrary! Always use the declaration block provided by the function designer.

RETURNS PARAMETER n

Available in: DSQL, ESQL

Added in: IB 6

Description

In order to return a BLOB, an extra input parameter must be declared and a RETURNS PARAMETER n clause added – n being the position of said parameter. This clause dates back to InterBase 6 beta, but somehow didn't make it into the Language Reference (it is documented in the Developer's Guide though).

See also:
External functions (UDFs)
User-defined function (UDF)
UDFs callable as void functions
DECLARE EXTERNAL FUNCTION (incorporating a new UDF library)
ALTER EXTERNAL FUNCTION
DROP EXTERNAL FUNCTION
Threaded Server and UDFs
Passing NULL to UDFs in Firebird 2
How to write an internal UDF function
Firebird Null Guide: NULL <–> non-NULL conversions you didn't ask for
Using descriptors with UDFs

back to top of page
<< EXTERNAL FUNCTION | FB 2.5 Language Reference | ALTER EXTERNAL FUNCTION >>
<< EXTERNAL FUNCTION | FB 2.1 Language Reference | ALTER EXTERNAL FUNCTION >>
<< CREATE OR ALTER TRIGGER | FB 2.0 Language Reference | DECLARE FILTER >>