FirebirdSQL logo

Corps du module

Le corps du module peut être écrit en PSQL ou être le corps d’un module externe.

Syntaxe corps du module
<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> ::=
  AS
    [<declarations>]
  BEGIN
    [<PSQL_statements>]
  END

<declarations> ::=
  <declare-item> [<declare-item> ...]

<declare-item> ::=
    <declare-var>;
  | <declare-cursor>;
  | <subroutine-declaration>;
  | <subroutine-implementation>

<subroutine-declaration> ::= <subfunc-decl> | <subproc-decl>

<subroutine-implementation> ::= <subfunc-impl> | <subproc-impl>

<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 du corps du module
Paramètre Description

declare-var

Déclaration d’une variable locale.

declare-cursor

Déclaration d’un curseur nommé.

subfunc-decl

Déclaration d’un sous-programme - fonction.

subproc-decl

Déclaration d’un sous-programme - procédure.

subfunc-impl

Mise en œuvre de la fonction du sous-programme.

subproc-impl

Mise en œuvre du sous-programme - procédures.

extbody

Le corps de la procédure externe. 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. Habituellement, le nom de l’UDR est spécifié.

Corps du module PSQL

Le corps PSQL commence par une section facultative dans laquelle sont déclarés les variables, les curseurs et les sous-programmes. Cette section est suivie d’un bloc d’instructions, qui sont exécutées dans une séquence logique en tant que programme. Le bloc d’instructions - ou instruction composée - est entouré des mots-clés BEGIN et END et est exécuté comme un seul bloc de code. Le bloc principal BEGIN …​ END peut contenir un nombre quelconque d’autres blocs BEGIN …​ END, soit en ligne ou séquentiel. L’imbrication maximale des blocs est de 512 niveaux. Toutes les instructions sauf BEGIN et END se terminent par un point-virgule (“;”). Aucun autre caractère ne peut être utilisé comme terminaison pour les instructions PSQL.

Modifier le terminateur dans isql

Nous allons faire une petite digression ici pour expliquer comment changer le terminateur dans l’utilitaire isql. Ceci est nécessaire pour pouvoir définir des modules PSQL dans celui-ci sans entrer en conflit avec isql lui-même, qui utilise le même symbole, le point-virgule ( ;), comme séparateur d’instruction.