EXPOSÉ SUR LE LANGAGE PROCÉDURAL PL/pgSQL GROUPE : 6 LES MEMBRES DU GROUPE: ⮚ E
EXPOSÉ SUR LE LANGAGE PROCÉDURAL PL/pgSQL GROUPE : 6 LES MEMBRES DU GROUPE: ⮚ ETOU ⮚FIAGNIGBE ⮚FOMBI ⮚FOIYEME ⮚ GBEMOU Plan de l’exposé INTRODUCTION I. APERCU DE PL/pgSQL II. STRUCTUTRES DE PL/pgSQL III. DECLARATION DE PL/pgSQL IV. EXPRESSIONS DE PL/pgSL V. INSTRUCTIONS DE BASES DE PL/pgSQL Plan de l’exposé VI. STRUCTURES DE CONTROLES DE PL/pgSQL VII. CURSEURS CONCLUSION Plan de l’exposé • Curseurs • Gestion des transactions avec PL/pgSQL • conclusion INTRODUCTION Qu’est-ce que Pl/pgsql ? INTRODUCTION • PL/pgSQL est un langage procédural chargeable pour le système de bases de données postgreSQL. • PostgreSQL™ est un système de gestion de bases de données relationnelles objet (ORDBMS) fondé sur POSTGRES. INTRODUCTION Pourquoi Pl/pgsql ? Pourquoi PL/pgSQL ? PL/pgSQL a été de créer dans le but d’avoir un langage de procédures chargeable qui : • Permet ajouter des structures de contrôle au langage SQL • Permet d'effectuer des traitements complexes ; • Facilite la création des fonctions et triggers (un trigger est un programme qui se déclenche automatiquement suite à un évènement). Avantages de l'utilisation de PL/pgSQL ? Le gros avantage de l’utilisation de PL/pgSQL est une augmentation considérable des performances en comparaison à une application qui n'utilise pas les procédures stockées en : ▪Supprimant traitement ou transfert entre le client et le serveur des résultats intermédiaires dont le client n'a pas besoin ainsi es va-et-vient des analyses de requêtes peuvent être évités ; ▪Eliminant les allers/retours inutiles entre le client et le serveur. Arguments supportés et types de données résultats Les fonctions écrites en PL/pgSQL peuvent accepter en argument n'importe quel type de données et peuvent renvoyer un résultat de n'importe lequel de ces types supportés par le serveur. On peut citer : Arguments supportés et types de données résultats ▪Le type record ce qui signifie que le résultat est un type ligne dont les colonnes sont déterminées par spécification dans la requête appelante. ▪Les types polymorphes : anyelement, anyarray, anynonarray, anyenum et anyrange. Arguments supportés et types de données résultats ▪ Les fonctions PL/pgSQL peuvent aussi renvoyer un ensemble de lignes (ou une table) de n'importe lequel des types de données dont les fonctions peuvent renvoyer une instance unique. Ces fonctions génèrent leur sortie en exécutant RETURN NEXT pour chaque élément désiré de l'ensemble résultat ou en utilisant RETURN QUERY pour afficher le résultat de l'évaluation d'une requête. Arguments supportés et types de données résultats ▪Enfin, une fonction PL/pgSQL peut être déclarée comme renvoyant void si elle n'a pas de valeur de retour utile. (Il est possible de l'écrire comme une procédure dans ce cas.) II- STRUCTUTRES DE PL/pgSQL • Les fonctions écrites en PL/pgSQL ont cette structure : CREATE FUNCTION une_fonction(integer, text) RETURNS integer AS 'texte du corps de la fonction’ LANGUAGE plpgsql; II- STRUCTUTRES DE PL/pgSQL • Le corps de la fonction est une simple chaîne littérale. Il est souvent utile d'utiliser • Les guillemets dollars pour écrire le corps de la fonction , plutôt que la syntaxe normale à base de guillemets simples. II- STRUCTUTRES DE PL/pgSQL pgSQL est un langage structuré en blocs. Le texte complet du corps d'une fonction doit être un bloc. Un bloc est défini comme : II- STRUCTUTRES DE PL/pgSQL [ <<label>> ] -- Pour identifier le bloc [ DECLARE déclarations ] BEGIN instructions END [ label ] ; Chaque déclaration et chaque expression au sein du bloc est terminé par un point-virgule. III- DECLARATION DE PL/pgSQL Toutes les variables doivent être déclarées sauf la variable de boucle FOR et peuvent avoir n’importe quel type de données. Exemple : Id integer ; Nom varchar ; III- Déclaration des paramètres de fonctions • Les identificateurs $1, $2… permettent de nommer les paramètres de fonctions. • Les ALIAS permettent de rendre plus lisible certaines requêtes III- Déclaration des paramètres de fonctions On a deux fonctions pour créer des alias : ❖CREATE FUNCTION CREATE FUNCTION AJOUT2 (x integer) RETURNS integer AS $$ BEGIN return x+2; END; $$ LANGUAGE plpgsql; III- Déclaration des paramètres de fonctions On a deux fonctions pour créer des alias : ❖ nom ALIAS for $n CREATE FUNCTTION AJOUT2(integer) Return integer AS $$ DECLARE x ALIAS FOR $1; BEGIN RETURN x+2; END; $$ LANGAGE plpsql; III- Déclaration des paramètres de fonctions Les paramètres déclarés en sortie d’une fonction se voient attribués des noms et alias optionnels comme les paramètres en entrées. Ils commencent par la valeur NULL et on leur attribue une valeur lors de l’exécution de la fonction. III- Déclaration des paramètres de fonctions Une fonction de type polymorphe est une fonction qui peut opérer sur des types de données différents. III- Déclaration des paramètres de fonctions Exemple: CREATE FUNCTION ajoute_trois_valeurs(v1 anyelement, v2 anyelement, v3 anyelement) RETURNS anyelement AS $$ DECLARE resultat ALIAS FOR $0; BEGIN resultat := v1 + v2 + v3; RETURN resultat; END; $$ LANGUAGE plpgsql; III- Déclaration des paramètres de fonctions On peut obtenir le même resultat avec : CREATE FUNCTION ajoute_trois_valeurs(v1 anyelement, v2 anyelement, v3 anyelement, OUT somme anyelement) AS $$ BEGIN somme := v1 + v2 + v3; END; $$ LANGUAGE plpgsql; UTILISATION DE ALIAS ❑ L’instruction ALIAS permet d’attribuer un nouveau nom à une variable. Elle n’est donc pas seulement déclarée pour des paramètres de fonctions et permet de nommer une seule variable de deux manières différentes. ❑ La syntaxe est la suivante : nouveaunom ALIAS FOR anciennom; COPIE DE TYPE ❑ La syntaxe est la suivante : Variable%TYPE %TYPE fournit le type de données d'une variable ou d'une colonne de table ❑ Il est créé à chaque fois qu’un utilisateur créé une table TYPE LIGNE OU COMPOSITES ❑ Les variables record sont similaires aux variables de type ligne, ❑ Ils n'ont pas de structure prédéfinie. TYPE RECORD ❑ Les variables record sont similaires aux variables de type ligne, ❑ Ils n'ont pas de structure prédéfinie. IV. EXPRESSIONS DE PL/pgSL IV- Les instructions de base PL/pgSQL • Affectation • L’affectation d’une valeur à une variable PL/pgSQL s’écrit ainsi: • L’expression ne manier qu’une seule valeur(éventuellement une valeur de rangée, si la variable est une variable de rangée ou d’enregistrement). IV- Les instructions de base PL/pgSQL • La variable cible peut être une simple variable, un champ d’une rangée ou variable d’enregistrement ou un élément de tableau qui se trouve être une simple ou champ. • On peut utiliser le signe d’ égalité = comme on peut utiliser : =, les deux marchent. • Exemple: IV- Les instructions de base PL/pgSQL • Exécuter une commande sans résultats • Pour toute commande SQL qui ne renvoie pas de lignes, par exemple INSERT sans la clause RETURNING, vous pouvez exécuter la commande à l’intérieur d’une fonction PL/pgSQL rien qu’en écrivant la commande. IV- Les instructions de base PL/pgSQL • Tout nom de variable PL/pgSQQL apparaissant dans le texte de la commande est traité comme un paramètre, puis la valeur actuelle de variable est fournie comme valeur du paramètre à l’exécution. • Parfois, il est utile d’évaluer une expression ou une requête SELECT mais sans récupérer le résultat, par exemple lors de l’appel d’une fonction qui a des effets de bord mai dont la valeur du résultat n’est pas utile. • Pour faire cela en pl/pgsql, utilisez l’instruction PERFORM. IV- Les instructions de base PL/pgSQL • Exemple: • PERFORM requête ; • Ceci exécute la requête et ne tient pas compte du résultat. • Pour le faire écrivez la requête comme de la même façon que vous écrivez une commande SELECT en remplaçant le mot clé SELECT par PERFORM. • Exemple: • PERFORM creer_vuemat( ‘cs_session_page_mv’, ma_reauete); IV- Les instructions de base PL/pgSQL • Exécuter une requête avec une seule ligne de résultats • Le résultat d’une commande SQL ne ramenant qu’une seule ligne de (mais avec ou une plusieurs colonnes) peut être affecté à une variable de type record, row ou à une liste de variables scalaires. Ceci se fait en écrivant la commande SQL de base et en ajoutant une clause INTO. • Exemple : IV- Les instructions de base PL/pgSQL • SELECT expression_select INTO [ STRICT ] cible FROM . . . ; • INSERT . . . RETURNING expressions INTO [ STRICT ] cible ; • UPDATE . . . RETURNING expressions INTO [ STRICT ] cible ; • DELETE . . . RETURNING expressions INTO [ STRICT ] cible ; • Où cible peur être une variable de type record, row ou une liste de variables ou champ record/row séparés par des virgules. IV- Les instructions de base PL/pgSQL • Exemple: SELECT * INTO monrec FROM emp WHERE nom = mon_nom; IF NOT FOUND THEN RAISE EXCEPTION ‘employe % introuvable’, nom_nom; END IF; Si le STRICT est indiqué, la requête doit renvoyer exactement une ligne. Exemple: IV- Les instructions de base PL/pgSQL BEGIN SELECT * INTO STRICT monrec FROM emp WHERE nom_mon_nom; EXCEPTION WHEN NO DATA FOUND THEN RAISE EXCEPTION ‘employe % inroubable ‘, mon_nom; WHEN TOO MANY ROWS THEN RAISE EXCEPTION ‘employe % non unique’, mon_nom; END; IV- Les instructions de base PL/pgSQL Exécuter des commandes dynamiques Créer la dynamique des requêtes est uploads/Ingenierie_Lourd/ expose-sur-le-langage-procedural-pl.pdf
Documents similaires
-
15
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Sep 07, 2022
- Catégorie Heavy Engineering/...
- Langue French
- Taille du fichier 5.2328MB