Fonctions externes
{CREATE [OR ALTER] | RECREATE} FUNCTION funcname [(<inparam> [, <inparam> ...])]
RETURNS <type> [COLLATE collation] [DETERMINISTIC]
EXTERNAL NAME <extname> ENGINE <engine>
[AS <extbody>]
<inparam> ::= <param_decl> [{= | DEFAULT} <value>]
<value> ::= {literal | NULL | context_var}
<param_decl> ::= paramname <type> [NOT NULL] [COLLATE collation]
<extname> ::= '<module name>!<routine name>[!<misc info>]'
<type> ::= <datatype> | [TYPE OF] domain | TYPE OF COLUMN rel.col
<datatype> ::=
{SMALLINT | INT[EGER] | BIGINT}
| BOOLEAN
| {FLOAT | DOUBLE PRECISION}
| {DATE | TIME | TIMESTAMP}
| {DECIMAL | NUMERIC} [(precision [, scale])]
| {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR} [(size)]
[CHARACTER SET charset]
| {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR} [VARYING] [(size)]
| BLOB [SUB_TYPE {subtype_num | subtype_name}]
[SEGMENT SIZE seglen] [CHARACTER SET charset]
| BLOB [(seglen [, subtype_num])]
Tous les paramètres d’une fonction externe peuvent être modifiés à l’aide de la fonction ALTER statement FUNCTION
.
ALTER FUNCTION funcname [(<inparam> [, <inparam> ...])]
RETURNS <type> [COLLATE collation] [DETERMINISTIC]
EXTERNAL NAME <extname> ENGINE <engine>
[AS <extbody>]
<extname> ::= '<module name>!<routine name>[!<misc info>]'
Vous pouvez supprimer une fonction externe en utilisant l’instruction DROP FUNCTION
.
DROP FUNCTION funcname
Paramètres | Description |
---|---|
funcname |
Nom de la fonction stockée. Peut contenir jusqu’à 31 octets. |
inparam |
Description du paramètre d’entrée. |
module name |
Nom du module externe où réside la fonction. |
routine name |
Le nom interne de la fonction dans le module externe. |
misc info |
Informations définies par l’utilisateur à transmettre au module externe de la fonction. |
engine |
Nom du moteur pour l’utilisation des fonctions externes. Spécifie généralement le nom de l’UDR. |
extbody |
Corps de la fonction externe. Une chaîne de caractères littérale qui peut être utilisée par l’UDR à diverses fins. |
Nous ne décrirons pas ici la syntaxe des paramètres d’entrée et du résultat de sortie. Elle correspond entièrement à la syntaxe des fonctions PSQL ordinaires, qui est décrite en détail dans le manuel du langage SQL. En revanche, nous donnons des exemples de déclaration de fonctions externes avec des explications.
CREATE FUNCTION sum_args (
n1 INTEGER,
n2 INTEGER,
n3 INTEGER
)
RETURNS INTEGER
EXTERNAL NAME 'udrcpp_example!sum_args'
ENGINE UDR;
L’implémentation de la fonction se trouve dans le module udrcpp_example
. Dans ce module, la fonction est enregistrée sous le nom sum_args
. Le moteur UDR est utilisé pour faire fonctionner la fonction externe.
CREATE OR ALTER FUNCTION regex_replace (
regex VARCHAR(60),
str VARCHAR(60),
replacement VARCHAR(60)
)
RETURNS VARCHAR(60)
EXTERNAL NAME 'org.firebirdsql.fbjava.examples.fbjava_example.FbRegex.replace(
String, String, String)'
ENGINE java;
L’implémentation de la fonction est située dans la fonction statique replace
de la classe org.firebirdsql.fbjava.examples.fbjava_example.FbRegex
. Le moteur Java est utilisé pour exécuter la fonction externe.