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.
- Notions
- Questions
- Ranger et relier
- Mises en situation
- 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 = 10total = 6total = 15total = 4
Voir la réponse
total = 10La 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 detotal := total + 1laisse NULL.Dans un bloc, l'instruction
SELECT prix FROM produit WHERE id = 3;fait répondre la baseERROR: query has no destination for result data. Quelle correction convient pour utiliser le prix ?- Terminer le bloc par un
RETURNsuivi du prix lu - Écrire
EXECUTEdevant le SELECT pour l'exécuter - Ajouter
INTO v_prixpour ranger le résultat dans une variable - Ajouter
FROM dualà la fin de la requête
Voir la réponse
Ajouter
INTO v_prixpour ranger le résultat dans une variableDans un bloc, un SELECT doit dire où va son résultat : une variable avec
INTO, ou rien avecPERFORMsi on ignore le résultat.FROM dualest une habitude d'Oracle, absente de PostgreSQL.- Terminer le bloc par un