Documentation PostgreSQL 7.4.29 | ||||
---|---|---|---|---|
Précédent | Arrière rapide | Chapitre 37. PL/pgSQL - SQL Procedural Language | Avance rapide | Suivant |
PL/pgSQL est un langage structuré en blocs. Le texte complet de la définition d'une fonction doit être un bloc. Un bloc est défini comme :
[ <<label>> ] [ DECLARE déclarations ] BEGIN instructions END;
Chaque déclaration et chaque expression au sein du bloc est terminé par un point-virgule.
Tous les mots clés et identifiants peuvent être écrits en majuscules et minuscules mélangées. Les identifiants sont implicitement convertis en minuscule à moins d'être entourés de guillemets doubles.
Il y a deux types de commentaires dans PL/pgSQL. Un double tiret (--) débute une ligne de commentaire qui s'étend jusqu'à la fin de la ligne. Un /* débute un bloc de commentaire qui s'étend jusqu'à la prochaine occurrence de */. Les blocs de commentaires ne peuvent pas être imbriqués, mais les commentaires de lignes (double tiret) peuvent être contenus dans un bloc de commentaire et un double tiret peut cacher les délimiteurs du bloc de commentaire /* et */.
Chaque expression de la section expression d'un bloc peut être un sous-bloc. Les sous-blocs peuvent être utilisés pour des groupements logiques ou pour localiser des variables locales à un petit groupe d'instructions.
Les variables déclarées dans la section déclaration précédant un bloc sont initialisées à leur valeur par défaut chaque fois qu'on entre dans un bloc et pas seulement une fois à chaque appel de fonction. Par exemple :
CREATE FUNCTION somefunc() RETURNS integer AS ' DECLARE quantity integer := 30; BEGIN RAISE NOTICE ''Quantity here is %'', quantity; -- Quantity here is 30 quantity := 50; -- -- Crée un sous-bloc -- DECLARE quantity integer := 80; BEGIN RAISE NOTICE ''Quantity here is %'', quantity; -- Quantity here is 80 END; RAISE NOTICE ''Quantity here is %'', quantity; -- Quantity here is 50 RETURN quantity; END; ' LANGUAGE plpgsql;
Il est important de ne pas confondre l'utilisation de BEGIN/END pour grouper les instructions dans PL/pgSQL avec les commandes de bases de données pour le contrôle des transactions. Les BEGIN/END de PL/pgSQL ne servent qu'au groupement; ils ne débutent ni ne terminent une transaction. Les procédures fonctions et déclencheurs sont toujours exécutées à l'intérieur d'une transaction établie par une requête extérieure -- ils ne peuvent pas être utilisés pour commencer ou effectuer un commit sur une transaction puisque PostgreSQL ne gère pas les transactions imbriquées.
Précédent | Sommaire | Suivant |
Astuces pour Développer en PL/pgSQL | Niveau supérieur | Déclarations |