FirebirdSQL logo

Une fonction stockée est un programme stocké dans la zone de métadonnées d’une base de données et exécuté du côté du serveur.Une fonction stockée est accessible aux procédures stockées, aux fonctions stockées (y compris elle-même), aux déclencheurs et aux programmes clients.Lorsqu’une fonction stockée se réfère à elle-même, cette fonction stockée est dite récursive.

Contrairement aux procédures stockées, les fonctions stockées renvoient toujours une seule valeur scalaire.Pour renvoyer une valeur à partir d’une fonction stockée, on utilise l’opérateur RETURN, qui met immédiatement fin à la fonction.

CREATE FUNCTION

affectation

Créez une nouvelle fonction stockée.

Disponible en

DSQL

Syntaxe
CREATE FUNCTION funcname [(<inparam> [, <inparam> ...])]
  RETURNS <type> [NOT NULL] [COLLATE collation]
  [DETERMINISTIC]
  <routine-body>

<inparam> ::= <param_decl> [{= | DEFAULT} <value>]

<value> ::=  {<literal> | NULL | <context_var>}

<param_decl> ::= paramname <type> [NOT NULL] [COLLATE collation]

<type> ::=
    <datatype>
  | [TYPE OF] domain
  | TYPE OF COLUMN rel.col

<datatype> ::=
    <scalar_datatype> | <blob_datatype>

<scalar_datatype> ::= Voir Syntaxe des types de données scalaires.

<blob_datatype> ::= Voir Syntaxe du type de données BLOB.


<routine-body> ::=
    <psql-routine-spec>
  | <external-routine-reference>

<psql-routine-spec> ::=
  [<rights-clause>] <psql-routine-body>


<rights-clause> ::=
  SQL SECURITY {DEFINER | INVOKER}

<psql-routine-body> ::=
  Voir module-body syntax.

<external-routine-spec> ::=
  <external-routine-reference>
  [AS <extbody>]

<external-routine-reference> ::= EXTERNAL NAME '<extname>' ENGINE <engine>

<extname> ::= '<module-name>!<routine-name>[!<misc-info>]'
Table 1. Paramètres de la fonction CREATE FUNCTION
Paramètre Description

funcname

Le nom de la fonction stockée.Peut contenir jusqu’à 63 caractères.

inparam

Description du paramètre d’entrée.

literal

Un littéral dont le type est compatible avec le paramètre.

context_var

Toute variable contextuelle dont le type est compatible avec celui du paramètre.

paramname

Le nom du paramètre d’entrée d’une fonction. Peut contenir jusqu’à 63 caractères. Le nom du paramètre doit être unique parmi les paramètres d’entrée de la fonction ainsi que ses variables locales.

module-name

Nom du module externe dans lequel se trouve la fonction.

routine-name

Nom de la fonction interne dans un module externe.

misc-info

Informations définies par l’utilisateur à envoyer à une fonction de module externe.

extbody

Le corps de la fonction externe. Une chaîne littérale qui peut être utilisée par l’UDR à diverses fins.

engine

Nom du moteur pour l’utilisation des fonctions externes. Habituellement, le nom de l’UDR est donné.

datatype

Type de données SQL.

collation

Ordre de tri.

domain_name

Nom de domaine.

rel

Le nom d’une table ou d’une vue.

col

Le nom de la colonne de la table ou de la vue.

L’instruction CREATE FUNCTION crée une nouvelle fonction stockée. Le nom de la fonction stockée doit être unique parmi les noms de toutes les fonctions stockées et des fonctions externes (UDF), sauf s’il s’agit d’une fonction interne ("sous-programme"). Pour les fonctions internes, l’unicité est suffisante uniquement dans les modules qui les "couvrent".

Note

Il est également souhaitable que le nom de la fonction stockée soit unique parmi les noms des fonctions situées dans les packages PSQL, bien que cela soit acceptable. Le fait est qu’actuellement vous ne pouvez pas appeler une fonction/procédure à partir de l’espace de noms global dans un package si une fonction/procédure du même nom est déclarée dans le package. Dans ce cas, la procédure/fonction du package sera toujours appelée.

CREATE FUNCTION L’en-tête définit le nom de la fonction stockée, déclare les paramètres d’entrée et le type de la valeur de retour.

Le corps d’une fonction consiste en des déclarations facultatives de variables locales, de sous-routines et de curseurs nommés, et en une ou plusieurs instructions, ou blocs d’instructions, enfermés dans un bloc externe qui commence par le mot-clé BEGIN et se termine par le mot-clé END. Les déclarations de variables locales et de curseurs nommés et les instructions internes doivent se terminer par un point-virgule ( ;).