15/08/2023

1. Procédures stockées

Lu 338 fois Licence Creative Commons

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;