PostgreSQL – Procédures stockées
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-#