33 lines
952 B
PL/PgSQL
33 lines
952 B
PL/PgSQL
|
|
CREATE OR REPLACE FUNCTION pieces_membre(int) RETURNS TABLE(id_piece int, quantite_piece int)
|
|
AS
|
|
$$
|
|
SELECT id_piece, quantite_contenir * quantite_enregistrer as quantite_pieces_possedees
|
|
FROM enregistrer
|
|
NATURAL JOIN boites
|
|
NATURAL JOIN contenir
|
|
WHERE id_membre=$1
|
|
UNION
|
|
(SELECT id_piece, quantite_acheter as quantite_pieces_possedees
|
|
FROM acheter WHERE id_membre=$1);
|
|
$$
|
|
LANGUAGE SQL;
|
|
;
|
|
|
|
|
|
-- Liste des modèles faisables à partir d'un membre
|
|
CREATE OR REPLACE FUNCTION modeles_faisables_membre(int) RETURNS TABLE(id_modele int) AS
|
|
$$
|
|
SELECT id_modele
|
|
FROM modeles
|
|
WHERE id_modele not IN
|
|
(
|
|
SELECT id_modele FROM (SELECT * FROM pieces_membre($1)) as pieces_possedees
|
|
RIGHT OUTER JOIN (SELECT id_piece as id_necessaire, quantite_necessiter, id_modele
|
|
FROM necessiter) as pieces_modeles
|
|
ON pieces_possedees.id_piece = id_necessaire
|
|
WHERE quantite_necessiter > quantite_piece OR quantite_piece IS NULL
|
|
)
|
|
$$
|
|
LANGUAGE SQL;
|