Académique Documents
Professionnel Documents
Culture Documents
1/
DELIMITER $$
CREATE PROCEDURE Nbr_clients(OUT nb int)
BEGIN
select count(*) into nb from clients;
END $$
DELIMITER ;
//
CALL Nbr_clients(@x);
2/
DELIMITER $$
CREATE PROCEDURE Produits_par_stock(idstk int)
BEGIN
DECLARE nb int default 0;
select count(*) into nb from produits where stock=idstk;
IF nb=0 THEN
select 'Aucun produit trouvé de ce stock' as 'Message';
ELSE
select * from produits where stock=idstk;
END IF;
END $$
DELIMITER ;
3/
DELIMITER $$
CREATE PROCEDURE PS_Total_Achat(IN clt int , OUT tot int)
BEGIN
select sum(l.prixachat*l.qteachat) into tot from ligneachats l inner join achats a on a.nachat = l.achat
where a.client = clt;
END $$
DELIMITER ;
5/
DELIMITER $$
CREATE PROCEDURE PS_Produits_plus_achates()
BEGIN
DECLARE maxtot FLOAT DEFAULT 0;
select tot into maxtot from (select sum(prixachat*qteachat) as tot , produit from ligneachats group
by produit order by sum(prixachat*qteachat) desc limit 1) as T;
select p.* from produits p inner join ligneachats l on l.produit = p.refpdt
group by p.refpdt
having sum(l.prixachat*l.qteachat) = maxtot;
END $$
DELIMITER ;
6/
DELIMITER $$
CREATE PROCEDURE PS_Top_Clients()
BEGIN
DECLARE cp int default 0;
DROP TABLE IF EXISTS RST;
CREATE TABLE RST(
Numero int ,
Nom varchar(100),
prenom varchar(100) ,
tel varchar(10) ,
total float ,
annee int
);
WHILE cp<3 DO
7/
DELIMITER $$
CREATE PROCEDURE PS_Total_Achats_Par_Annee()
BEGIN
DECLARE cp int default 0;
DROP TABLE IF EXISTS RST;
CREATE TABLE RST(
total float ,
annee int
);
WHILE cp<3 DO
insert into RST
select sum(prixachat*qteachat) tot , year(curdate())-cp from achats inner join ligneachats on
ligneachats.achat = achats.nachat
where year(dateachat) = year(curdate()) - cp
group by year(dateachat);
set cp = cp +1;
END WHILE;
select * from RST;
DROP TABLE RST;
END $$
DELIMITER ;
DELIMITER $$
CREATE PROCEDURE PS_Total_Achats_Par_Annee2()
BEGIN
DECLARE cp int default 0;
DROP TABLE IF EXISTS RST;
CREATE TABLE RST(
total float ,
annee int
);
WHILE cp<3 DO
insert into RST values(TotalAchat(year(curdate())-cp) , year(curdate())-cp)
set cp = cp +1;
END WHILE;
select * from RST;
DROP TABLE RST;
END $$
DELIMITER ;
Une fonction stockée est un sous-programme qui retourne une valeur d’un type de données, ce
programme réalise un traitement selon des paramètres(optionnelles)
Syntaxe :
DELIMITER $$
CREATE FUNCTION NomFonction(para1 type ,
para2 type , ....)
RETURNS typededonnée
BEGIN
Traitement;
RETURN(Valeur)
END $$
DELIMITER ;
DELIMITER $$
CREATE FUNCTION SOMME(a int , b int)
RETURNS int
BEGIN
RETURN(a+b);
END $$
DELIMITER ;
DELIMITER $$
CREATE FUNCTION Nbr_Client()
RETURNS INT
BEGIN
DECLARE nb int DEFAULT 0;
select count(*) into nb from clients;
RETURN(nb);
END $$
DELIMITER ;
Exemple : (fonction qui retourne le total d’achat pour une année donnée en paramètre)
DELIMITER $$
CREATE FUNCTION TotalAchat(annee INT)
RETURNS FLOAT
BEGIN
DECLARE tot FLOAT DEFAULT 0;
select sum(l.prixachat*l.qteachat) into tot from ligneachats l inner join achats a on a.nachat = l.achat
where year(a.dateachat) =annee;
RETURN(tot);
END $$
DELIMITER ;
//
select TotalAchat(2020);
Question:
Exemple: (une function qui retourne le total d’achat d’un client donné pour une année donnée)
DELIMITER $$
CREATE FUNCTION TotalAchat_Client(annee INT , clt INT)
RETURNS FLOAT
BEGIN
DECLARE tot FLOAT DEFAULT 0;
select sum(l.prixachat*l.qteachat) into tot from ligneachats l inner join achats a on a.nachat = l.achat
where year(a.dateachat) =annee and a.client = clt;
RETURN(tot);
END $$
DELIMITER ;
//
6.3./ Triggers