FirebirdSQL logo

Une procédure stockée (SP) est un module logiciel qui peut être appelé depuis le client, une autre procédure, une fonction, un bloc exécutable ou un déclencheur.Les procédures stockées, les fonctions stockées, les blocs exécutables et les déclencheurs sont écrits en langage procédural SQL (PSQL). La plupart des instructions SQL sont également disponibles dans PSQL, parfois avec des restrictions ou des extensions.Les exceptions notables sont les déclarations DDL et de gestion des transactions.

Les procédures stockées peuvent accepter et renvoyer de nombreux paramètres.

CREATE PROCEDURE

Objectif

Créez une nouvelle procédure stockée.

Disponible en

DSQL, ESQL

Syntaxe
CREATE PROCEDURE procname [(<inparam> [, <inparam> ...])]
[ RETURNS (<outparam> [, <outparam> ...]) ]
<routine body>

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

<outparam>  ::=  <param_decl>

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

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

<type> ::= <datatype> | [TYPE OF] domain_name | 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-spec>

<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 PROCEDURE
Paramètre Description

procname

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

inparam

Description du paramètre d’entrée.

outparam

Description du paramètre de sortie.

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 ou de sortie de la procédure.Peut contenir jusqu’à 63 caractères.Le nom du paramètre doit être unique parmi les paramètres d’entrée et de sortie de la procédure, ainsi que parmi ses variables locales.

extbody

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

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.

engine

Nom du moteur pour utiliser les fonctions externes.En général, le nom de l’UDR est spécifié.

datatype

Le 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

Nom de la colonne de la table ou de la vue.

L’instruction CREATE PROCEDURE crée une nouvelle procédure stockée.Le nom de la procédure stockée doit être unique parmi les noms de toutes les procédures stockées, tables et vues de la base de données.

Note

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

CREATE PROCEDURE est une déclaration composite composée d’un en-tête et d’un corps.

L’en-tête définit le nom de la procédure stockée et déclare les paramètres d’entrée et de sortie s’ils doivent être renvoyés par la procédure.

Le corps de la procédure est constitué de déclarations facultatives de variables locales, de sous-routines et de curseurs nommés, et d’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 les curseurs nommés ainsi que les instructions internes doivent se terminer par un point-virgule (“;”).