Les blocs procéduraux

Le bloc d'un langage procédural de base de données (PL/pgSQL) : sections DECLARE, BEGIN et END, variables et types repris d'une colonne, SELECT INTO, IF, boucles et affichage.

  • 33 cartes
  • 5 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation
  5. Comprendre

Quelques cartes du deck

  • Bloc anonyme : de quoi s'agit-il ?

    Voir la réponse

    Morceau de code procédural envoyé à la base et exécuté une seule fois, sans nom ni valeur de retour : il n'est pas enregistré. En PostgreSQL, il s'écrit avec DO.

    Pour garder le code et le rappeler plus tard, on crée une procédure ou une fonction stockée ; le bloc anonyme sert aux scripts de passage et aux essais.

  • Que vaut total à la fin, et donc que montre le message ?

    ```sql
    DO $$
    DECLARE
    total integer := 0;
    BEGIN
    FOR i IN 1..4 LOOP
    total := total + i;
    END LOOP;
    RAISE NOTICE 'total = %', total;
    END $$;
    `

    • total = 10
    • total = 6
    • total = 15
    • total = 4
    Voir la réponse

    total = 10

    La boucle fait quatre tours avec i = 1, 2, 3 puis 4, bornes comprises : 1 + 2 + 3 + 4 = 10. 6 oublierait le dernier tour, 15 en ajouterait un.

  • Un bloc s'écrit dans l'ordre : … pour les variables, … pour les instructions, puis ….

    Voir la réponse

    Un bloc s'écrit dans l'ordre : DECLARE pour les variables, BEGIN pour les instructions, puis END.

    DECLARE est facultatif quand il n'y a rien à déclarer. Une section EXCEPTION, facultative aussi, vient entre les instructions et END.

  • Section déclarative : de quoi s'agit-il ?

    Voir la réponse

    Partie du bloc, introduite par DECLARE, où l'on nomme et type les variables avant de s'en servir, avec une valeur de départ facultative.

    Une variable déclarée sans valeur de départ vaut NULL, pas 0 : total integer; suivi de total := total + 1 laisse NULL.

  • Dans un bloc, l'instruction SELECT prix FROM produit WHERE id = 3; fait répondre la base ERROR: query has no destination for result data. Quelle correction convient pour utiliser le prix ?

    • Terminer le bloc par un RETURN suivi du prix lu
    • Écrire EXECUTE devant le SELECT pour l'exécuter
    • Ajouter INTO v_prix pour ranger le résultat dans une variable
    • Ajouter FROM dual à la fin de la requête
    Voir la réponse

    Ajouter INTO v_prix pour ranger le résultat dans une variable

    Dans un bloc, un SELECT doit dire où va son résultat : une variable avec INTO, ou rien avec PERFORM si on ignore le résultat. FROM dual est une habitude d'Oracle, absente de PostgreSQL.