]> Git — Sourcephile - tmp/julm/LesQuatreRoux.git/blob - sql/init/Prix.sql
dev sql
[tmp/julm/LesQuatreRoux.git] / sql / init / Prix.sql
1 \p CREATE TABLE Prix
2 CREATE CACHED TABLE "Prix"
3 ( ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL
4 , date DATE DEFAULT CURRENT_DATE NOT NULL
5 , produit INTEGER NOT NULL
6 , euros DECIMAL(100,2) DEFAULT 0.00 NOT NULL
7 , CONSTRAINT "PK_Prix" PRIMARY KEY(ID)
8 , CONSTRAINT "FK_Prix_produit"
9 FOREIGN KEY(produit)
10 REFERENCES "Produit"(ID)
11 ON UPDATE CASCADE
12 , CONSTRAINT "La combinaison (produit, date) d'un prix doit être unique"
13 UNIQUE (produit, date)
14 );
15
16 DROP FUNCTION produit_maxdate IF EXISTS CASCADE;
17 CREATE FUNCTION produit_maxdate(IN at_date DATE)
18 RETURNS TABLE(produit INTEGER, max_date DATE)
19 READS SQL DATA
20 BEGIN ATOMIC
21 RETURN TABLE
22 (SELECT "Produit".ID as produit
23 , MAX( date ) as max_date
24 FROM "Prix"
25 JOIN "Produit" ON "Produit".ID = "Prix".produit
26 WHERE date <= at_date
27 GROUP BY "Produit".ID
28 );
29 END;
30 .;
31
32 DROP FUNCTION prix_à_date IF EXISTS CASCADE;
33 CREATE FUNCTION prix_à_date(IN at_date DATE)
34 RETURNS TABLE(produit INTEGER, "DATE" DATE, euros DECIMAL)
35 READS SQL DATA
36 BEGIN ATOMIC
37 RETURN TABLE
38 (SELECT produit, date, euros
39 FROM TABLE (produit_maxdate(at_date)) as P
40 JOIN "Prix" ON "Prix".produit = P.produit
41 AND "Prix".date = P.max_date
42 );
43 END;
44 .;