QCM : Fonctions PL/pgSQL et contrats — 17 questions

Questions et réponses du QCM

1. Quel est le rôle général d’une fonction PostgreSQL encapsulant une question SQL répétée ?

Recevoir des paramètres, effectuer un traitement et renvoyer un résultat typé
Stocker des lignes sans paramètre et afficher un message au client
Décrire une table, modifier son schéma et supprimer ses contraintes
Lancer une transaction, valider les changements et produire un journal

Recevoir des paramètres, effectuer un traitement et renvoyer un résultat typé

Explication

Une fonction PostgreSQL formalise des entrées, exécute un traitement et retourne une valeur conforme au type annoncé. La description d’une table et la gestion de ses contraintes relèvent plutôt du langage de définition des données.

2. Quelle séquence correspond à la transformation d’une question métier répétée en fonction PostgreSQL ?

Afficher les lignes, modifier les colonnes, valider la transaction, puis compter les erreurs
Créer une table, remplir ses lignes, supprimer les doublons, puis fermer la session
Définir les entrées, filtrer les données, calculer le résultat, puis le retourner
Déclarer le résultat, ignorer les filtres, parcourir les tables, puis produire une alerte

Définir les entrées, filtrer les données, calculer le résultat, puis le retourner

Explication

La transformation suit une chaîne logique : préciser les entrées, appliquer le filtre métier, calculer la réponse et la retourner avec un type explicite. La création d’une table ou l’émission d’une alerte ne constitue pas cette démarche.

3. Quels éléments composent le contrat d’une fonction PL/pgSQL appelable ?

Une table temporaire, une transaction ouverte et un message destiné à l’administrateur
Une liste de colonnes, une contrainte d’intégrité et une procédure de sauvegarde
Des entrées nommées et typées, un traitement organisé et une sortie compatible
Un nom de schéma, une vue matérialisée et une règle de réplication

Des entrées nommées et typées, un traitement organisé et une sortie compatible

Explication

Le contrat associe des valeurs d’entrée nommées et typées, un traitement SQL structuré dans un bloc et une sortie compatible avec RETURNS. Une table temporaire ou une règle de réplication ne définit pas le contrat d’appel de la fonction.

4. Que signifie l’annonce RETURNS integer dans la signature d’une fonction PL/pgSQL ?

La fonction indique qu’elle modifiera une colonne de type entier
La fonction promet de retourner un décompte représenté par un entier
La fonction promet de retourner plusieurs lignes organisées dans un tableau
La fonction signale une alerte textuelle destinée à l’application appelante

La fonction promet de retourner un décompte représenté par un entier

Explication

RETURNS integer annonce une valeur de sortie entière, par exemple un décompte. Cette déclaration ne signifie ni retour tabulaire ni émission d’un message d’alerte.

5. Dans quel ordre les principales parties du squelette PL/pgSQL interviennent-elles ?

END prépare les variables, BEGIN fournit le résultat, puis DECLARE clôt le traitement
BEGIN déclare les variables, RETURN encadre le traitement, puis END fournit le résultat
RETURN prépare les variables, DECLARE encadre le traitement, puis BEGIN fournit le résultat
DECLARE prépare les variables, BEGIN et END encadrent le traitement, puis RETURN fournit le résultat

DECLARE prépare les variables, BEGIN et END encadrent le traitement, puis RETURN fournit le résultat

Explication

DECLARE sert à préparer les variables, BEGIN et END délimitent le bloc de traitement, et RETURN renvoie la valeur promise. Les autres séquences attribuent à ces mots-clés des rôles qui ne correspondent pas au squelette PL/pgSQL.

6. Quelle distinction décrit correctement un paramètre, une variable et une colonne SQL ?

Le paramètre vient d’une ligne, la variable vient de l’appelant et la colonne conserve un intermédiaire
Le paramètre définit une table, la variable lance une requête et la colonne renvoie une fonction
Le paramètre vient de l’appelant, la variable conserve un intermédiaire et la colonne vient d’une ligne
Le paramètre conserve un intermédiaire, la variable vient d’une ligne et la colonne vient de l’appelant

Le paramètre vient de l’appelant, la variable conserve un intermédiaire et la colonne vient d’une ligne

Explication

Le paramètre est fourni lors de l’appel, la variable stocke une valeur intermédiaire dans le bloc et la colonne représente une donnée issue d’une ligne SQL. Inverser ces provenances brouille les trois niveaux de données.

7. Comment une fonction PL/pgSQL doit-elle gérer un SELECT qui produit des lignes destinées à une sortie ?

Employer RETURN pour absorber chaque ligne avant de poursuivre le traitement du bloc
Le laisser produire ses lignes sans destination afin que PostgreSQL choisisse le récepteur
Lui donner une destination explicite, avec INTO pour une variable ou RETURN QUERY pour des lignes
Utiliser DECLARE pour transmettre les lignes directement à l’appelant sans variable intermédiaire

Lui donner une destination explicite, avec INTO pour une variable ou RETURN QUERY pour des lignes

Explication

Un SELECT produisant des lignes doit préciser sa destination : INTO place le résultat dans une variable, tandis que RETURN QUERY transmet des lignes à l’appelant. Laisser la requête sans destination ne définit pas le transfert attendu.

8. Quel enchaînement décrit le transfert d’une valeur calculée entre SQL, le bloc PL/pgSQL et l’appelant ?

INTO place le résultat SQL dans une variable, puis RETURN transmet cette variable à l’appelant
RETURN place le résultat SQL dans une variable, puis INTO transmet cette variable à l’appelant
INTO transmet le résultat SQL à l’appelant, puis RETURN le conserve dans le bloc
DECLARE place le résultat SQL dans l’appelant, puis END transmet la variable au bloc

INTO place le résultat SQL dans une variable, puis RETURN transmet cette variable à l’appelant

Explication

Le transfert se fait en deux étapes : INTO fait passer le résultat de la requête vers une variable du bloc, puis RETURN envoie cette variable à l’appelant. La confusion vient de l’attribution à INTO du rôle de retour externe, qui appartient à RETURN.

9. Que retourne `don.stock_disponible` lorsqu’un groupe connu ne possède aucune poche disponible ?

La valeur 0, produite par le comptage sans ligne
Le nombre de poches correspondant au groupe voisin
La valeur NULL, réservée à tout résultat vide
Une erreur indiquant l’absence de poche compatible

La valeur 0, produite par le comptage sans ligne

Explication

Un groupe connu sans poche disponible donne un comptage égal à zéro, donc la fonction retourne 0. La valeur NULL correspond au cas où l’identifiant du groupe n’est pas trouvé.

10. Lors de l’exécution de `don.stock_disponible('O-', 'CGR')`, quelle valeur est renvoyée si ce groupe connu possède le stock disponible décrit ?

NULL parce que la recherche précède le décompte
0 poche parce que le comptage porte sur le groupe
1 poche représentant l’identifiant du groupe trouvé
16 poches disponibles pour ce groupe et ce produit

16 poches disponibles pour ce groupe et ce produit

Explication

Dans ce cas documenté, la fonction compte 16 poches disponibles après avoir identifié le groupe O-. La recherche de l’identifiant sert à filtrer le stock, mais ne remplace pas le décompte des poches.

11. Que permet de déterminer une condition `EXISTS` dans une requête ?

La valeur agrégée calculée à partir des lignes
Le nombre exact de lignes satisfaisant les conditions
La liste complète des lignes satisfaisant les conditions
Si au moins une ligne satisfait les conditions

Si au moins une ligne satisfait les conditions

Explication

EXISTS répond par un booléen à la question de savoir si une ligne correspond aux conditions. COUNT fournit plutôt un nombre, tandis que RETURN QUERY sert à renvoyer des lignes.

12. Quel résultat fournit `don.site_a_collecte(p_site_id, p_jour)` pour un site et une date donnés ?

Un entier indiquant le nombre de collectes réalisées
Une date correspondant à la collecte la plus récente
Un booléen indiquant si une collecte a eu lieu
Une liste contenant les poches collectées ce jour-là

Un booléen indiquant si une collecte a eu lieu

Explication

Cette fonction renvoie une information d’existence sous la forme d’un booléen : une collecte a eu lieu ou non pour le site et la date concernés. Un entier conviendrait à un décompte, mais ce n’est pas le contrat de cette fonction.

13. Quel type de retour convient lorsqu’une fonction doit fournir la liste des poches correspondant à une requête ?

`RETURN QUERY`, afin de renvoyer les lignes obtenues
`EXISTS`, afin d’indiquer la présence d’une ligne
`RETURN NULL`, afin de représenter la liste demandée
`COUNT`, afin de calculer le total des lignes

`RETURN QUERY`, afin de renvoyer les lignes obtenues

Explication

RETURN QUERY est adapté lorsqu’il faut renvoyer une liste de poches issue d’une requête. EXISTS ne fournit qu’un indicateur d’existence et COUNT ne fournit qu’un nombre.

14. Pour prédire correctement le résultat d’une fonction, quel enchaînement faut-il examiner ?

La valeur finale, puis les paramètres ignorés et les tables non consultées
Le nom de la fonction, sa date de création, son auteur et son commentaire
Les paramètres, les lignes retenues, le calcul, la cible et le type retourné
Le type retourné, puis une valeur choisie sans examiner la requête

Les paramètres, les lignes retenues, le calcul, la cible et le type retourné

Explication

Il faut suivre les paramètres reçus, les lignes retenues par FROM, JOIN et WHERE, l’expression calculée, sa variable cible et la compatibilité avec RETURNS. Se limiter au nom ou au type de retour ne permet pas de reconstituer le calcul.

15. Pourquoi une requête `SELECT INTO` utilisant une sélection de plusieurs lignes peut-elle poser problème ?

Parce que plusieurs lignes ne deviennent pas automatiquement une valeur unique
Parce qu’un agrégat produit nécessairement une ligne par enregistrement
Parce que la clause WHERE empêche toute affectation à une variable
Parce que le type RETURNS impose toujours un résultat booléen

Parce que plusieurs lignes ne deviennent pas automatiquement une valeur unique

Explication

Une sélection de plusieurs lignes ne correspond pas automatiquement à une seule valeur assignable par SELECT INTO ; le grain métier doit être respecté. À l’inverse, un agrégat peut produire un total unique adapté à une variable.

16. Quelle caractéristique rend le contrat d’une fonction robuste et vérifiable ?

Elle décrit sa syntaxe, ses dépendances, sa performance et son déploiement en production
Elle regroupe ses appels, ses permissions, ses index et ses effets de bord dans une procédure
Elle rend visibles ses entrées, son grain, sa destination et son comportement dans le cas vide
Elle masque ses entrées, son grain, sa destination et son comportement dans le cas vide

Elle rend visibles ses entrées, son grain, sa destination et son comportement dans le cas vide

Explication

Une fonction robuste explicite ses entrées, son grain, la destination du résultat, le cas vide et les tests du contrat. Masquer ces éléments rend le comportement plus difficile à comprendre et à vérifier.

17. Quelle séquence applique correctement la méthode de conception d’une fonction métier ?

Créer une procédure d’action, laisser les types implicites, calculer sans destination, puis retourner une valeur optionnelle
Écrire la requête, choisir les types après le calcul, ajouter les paramètres, puis traiter les erreurs éventuelles
Paramétrer la question métier, typer les éléments, calculer avec une destination explicite, puis gérer le cas vide
Définir les tests, supprimer les paramètres métier, calculer dans plusieurs requêtes, puis ignorer le résultat vide

Paramétrer la question métier, typer les éléments, calculer avec une destination explicite, puis gérer le cas vide

Explication

La méthode commence par la question métier et le typage des entrées, variables et sortie, puis impose une requête à destination explicite et un résultat compatible dans le cas vide. Reporter le typage après le calcul ne respecte pas cette progression de conception.

Révisez avec les flashcards

Mémorisez les réponses avec 37 flashcards sur Fonctions PL/pgSQL et contrats.

Qu'est-ce qu'une fonction PostgreSQL ?

Une fonction PostgreSQL reçoit des paramètres, traite et retourne un résultat typé.

Quelle est la première étape pour transformer une question répétée en fonction ?

Définir les entrées de la fonction.

Que fait-on après avoir défini les entrées dans une fonction SQL ?

Filtrer les données selon la question métier.

Voir les flashcards →

Approfondir avec la fiche

Consultez la fiche de révision complète sur Fonctions PL/pgSQL et contrats.

Voir la fiche →

Cours similaires

Crée tes propres QCM

Importe ton cours et l'IA génère des QCM avec corrections en 30 secondes.

Générateur de QCM