Procédures
Les procédures stockées sont semblables aux fonctions à la différence qu'une fonction sert à retourner un résultat et qu'une procédure effectue des opérations sans retourner de valeur. Cette différence n'existe pas dans la plupart des autres langages de programmation.
Nous pourrions simplifier l'enregistrement dans la table vehicule
avec une procédure qui ira créer automatiquement une entrée dans la table marque
si celle-ci n'existe pas déjà:
CREATE OR REPLACE PROCEDURE insert_vehicule(nom_marque VARCHAR(25), nom_modele VARCHAR(25), id_vehicule INT)
LANGUAGE plpgsql
AS $$
BEGIN
IF NOT EXISTS (SELECT id FROM marque WHERE nom = nom_marque) THEN
INSERT INTO marque (id, nom) VALUES (nextval('seq_marque_id'), nom_marque);
END IF;
INSERT INTO vehicule (id, modele, marque_id)
VALUES (id_vehicule, nom_modele, (SELECT id FROM marque WHERE nom = nom_marque));
END;
$$;
On spécifie le langage plpgsql
pour pouvoir effectuer une condition IF
, cela induit l'utilisation des instructions BEGIN
et END
. Le symbole $$
est utilisé ici pour remplacer le délimiteur habituel des requêtes pour servir de délimiteur pour la procédure.
On peut ensuite appeler la procédure avec CALL
:
CALL insert_vehicule('Jeep', 'Renegade', 7);
CALL insert_vehicule('Jeep', 'Wrangler', 8);
Et enfin, voir le résultat dans la vue:
SELECT * FROM v_vehicules;