EXECUTE BLOCK

affectation

Exécution d'un bloc PSQL anonyme.

Disponible en

DSQL

Syntaxe
EXECUTE BLOCK [(<inparams>)]
  [RETURNS (<outparams>)]
  <psql-module-body>

<inparams> ::= <param_decl> = ? [, <inparams> ]

<outparams> ::= <param_decl> [, <outparams>]

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

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

<non_array_datatype> ::=
    <scalar_datatype> | <blob_datatype>

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

<blob_datatype> ::= Voir syntaxe des types de données BLOB.

<psql-module-body> ::=
  Voir syntaxe du corps du module.
Table 1. Paramètres de l'instruction EXECUTE BLOCK.
ParamètreDescription

param_decl

Une description du paramètre d'entrée ou de sortie.

paramname

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.

non_array_datatype

Type de données SQL à l'exclusion des tableaux.

collation

Ordre de tri.

domain

Domaine.

rel

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

col

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

Exécute un bloc de code PSQL comme s'il s'agissait d'une procédure stockée, éventuellement avec des paramètres d'entrée et de sortie et des variables locales. Cela permet à l'utilisateur d'exécuter PSQL "à la volée" dans un contexte DSQL.

Exemples:

Cet exemple saisit les nombres de 0 à 127 et leurs caractères ASCII correspondants dans la table ASCIITABLE :

EXECUTE BLOCK
AS
  DECLARE i INT = 0;
BEGIN
  WHILE (i < 128) DO
  BEGIN
    INSERT INTO AsciiTable VALUES (:i, ascii_char(:i));
    i = i + 1;
  END
END

L'exemple suivant calcule la moyenne géométrique de deux nombres et la renvoie à l'utilisateur :

EXECUTE BLOCK (
  x DOUBLE PRECISION = ?,
  y DOUBLE PRECISION = ?)
RETURNS (gmean DOUBLE PRECISION)
AS
BEGIN
  gmean = sqrt(x*y);
  SUSPEND;
END

Comme ce bloc a des paramètres d'entrée, il doit être préparé à l'avance. Il est alors possible de définir les paramètres et d'exécuter le bloc. La façon dont cela est fait, et si cela peut être fait du tout, dépend du logiciel client. Voir les notes ci-dessous.

Notre dernier exemple prend deux valeurs entières, la plus petite et la plus grande. Pour tous les nombres compris dans l'intervalle le plus petit..le plus grand, le bloc fournit le nombre lui-même, son carré, le cube et la quatrième puissance.

EXECUTE BLOCK (smallest INT = ?, largest INT = ?)
RETURNS (
  number INT,
  square BIGINT,
  cube BIGINT,
  fourth BIGINT)
AS
BEGIN
  number = smallest;
  WHILE (number <= largest) DO
  BEGIN
    square = number * number;
    cube = number * square;
    fourth = number * cube;
    SUSPEND;
    number = number + 1;
  END
END

Là encore, la manière dont vous pouvez définir les valeurs des paramètres dépend du logiciel client.