Source : https://stacklima.com/postgresql-introduction-aux-procedures-stockees/

En informatique, dans la technologie des bases de données, une Procédure Stockée (ou Stored Procedure en anglais) est un ensemble d’instructions SQL précompilées, stockées dans une base de données et exécutées sur demande par le SGBD qui manipule la base de données.

Les procédures stockées peuvent être lancées par un utilisateur, un administrateur DBA ou encore de façon automatique par un événement déclencheur (de l’anglais « trigger »).

Voici un exemple de procédure stockée avec Postgresql.

Exemple:

Création d’une table « comptes » :

drop table if exists comptes;

create table comptes (
    id int generated by default as identity,
    nom varchar(100) not null,
    solde dec(15, 2) not null,
    primary key(id)
);

insert into comptes(nom, solde)
values('Alice', 10000);

insert into comptes(nom, solde)
values('Bob', 10000);
select * from comptes;

Résultat :

dupontsarl=# drop table if exists comptes;
values(‘Bob’, 10000);NOTICE: table « comptes » does not exist, skipping
DROP TABLE
dupontsarl=#
dupontsarl=# create table comptes (
dupontsarl(# id int generated by default as identity,
dupontsarl(# nom varchar(100) not null,
dupontsarl(# solde dec(15, 2) not null,
dupontsarl(# primary key(id)
dupontsarl(# );
CREATE TABLE
dupontsarl=#
dupontsarl=# insert into comptes(nom, solde)
dupontsarl-# values(‘Alice’, 10000);
INSERT 0 1
dupontsarl=#
dupontsarl=# insert into comptes(nom, solde)
dupontsarl-# values(‘Bob’, 10000);
INSERT 0 1
dupontsarl=# select * from comptes;
id | nom | solde
—-+——-+———-
1 | Alice | 10000.00
2 | Bob | 10000.00
(2 rows)

dupontsarl=#

On crée une procédure stockée nommée « transfert », qui a pour utilité de transférer de l’argent d’une personne à une autre :

create or replace procedure transfert(
   donneur int,
   receveur int, 
   montant dec
)
language plpgsql    
as $$
begin
    -- On soustrait le montant du compte du donneur
    update comptes 
    set solde = solde - montant 
    where id = donneur;

    -- On ajoute le montant au compte du receveur 
    update comptes 
    set solde = solde + montant 
    where id = receveur;

    commit;
end;$$;

Appel d’une procédure stockée

Une procédure stockée s’appelle avec la commande « CALL« :

Syntaxe :

call stored_procedure_name(argument_list);

Exemple:

On transfère ci-dessous 1 000 € de Alice à Bob :

call transfert(1, 2, 1000);

Résultat :

dupontsarl=# SELECT * FROM comptes;
 id |  nom  |  solde
----+-------+----------
  1 | Alice |  9000.00
  2 | Bob   | 11000.00
(2 rows)

dupontsarl=#

Lister les procédures stockées existantes

dupontsarl=# \df
List of functions
Schema | Name | Result data type | Argument data types | Type
——–+———–+——————+—————————————————-+——
public | transfert | | donneur integer, receveur integer, montant numeric | proc
(1 row)

dupontsarl=#

Visualiser une procédure stockée

dupontsarl-# \sf transfert
CREATE OR REPLACE PROCEDURE public.transfert(donneur integer, receveur integer, montant numeric)
LANGUAGE plpgsql
AS $procedure$
begin
— On soustrait le montant du compte du donneur
update comptes
set solde = solde – montant
where id = donneur;

-- On ajoute le montant au compte du receveur
update comptes
set solde = solde + montant
where id = receveur;

commit;

end;$procedure$
dupontsarl-#

Cet article vous a intéressé ? Laissez un commentaire ci-dessous. Merci.

Print Friendly, PDF & Email

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Blue Captcha Image
Refresh

*

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.