Toevoegen van een order
Nu de eerste stapjes in PL/pgSQL zijn gemaakt leek het me zinvol om een nieuwe stored procedure te maken voor het aanmaken van een order. Het toevoegen bestaat uit 2 verschillende delen:
- Het invoeren van de gegevens in de order-kop-tabel
- Het toevoegen van de producten aan een order
Bij het toevoegen van producten aan een order worden ook de beschrijving + prijs opgeslagen in de tabel tbl_order_line. Op die manier blijft correcte informatie bewaard als een product wordt verwijderd of de prijs / omschrijving wijzigt.
Dit betekent dus dat er 2 SP’s worden gemaakt.
Creëren van een order:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$$
DECLARE
p_userid ALIAS FOR $1; -- Parameter UserID
BEGIN
-- Voer de INSERT uit op de order-kop tabel
INSERT INTO base.tbl_order_head(user_id,orderdate) VALUES(p_userid, NOW());
RETURN TRUE;
EXCEPTION
WHEN FOREIGN_KEY_VIOLATION THEN
RAISE EXCEPTION 'Het gegeven UserID bestaat niet';
RETURN FALSE;
WHEN OTHERS THEN
RAISE EXCEPTION 'Er is een fout opgetreden';
RETURN FALSE;
END;
$$
LANGUAGE 'plpgsql' VOLATILE;
Toevoegen van producten aan een order:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$$
DECLARE
p_orderid ALIAS FOR $1; -- Parameter OrderID
p_productid ALIAS FOR $2; -- Parameter ProductID
p_aantal ALIAS FOR $3; -- Parameter aantal
rec RECORD; -- Variabele om resultaten in te fetchen
BEGIN
-- Haal de gegevens van het product op en sla deze op in de variabele rec
FOR rec IN SELECT * FROM base.tbl_product WHERE id=p_productid LOOP
-- Hier worden de gegevens uit rec ingevoerd in tbl_order_line
INSERT INTO base.tbl_order_line
(
order_id,
product_title,
product_price,
number_items
)
VALUES
(
p_orderid,
rec.title,
rec.price,
p_aantal
);
END LOOP;
RETURN TRUE;
END;
$$
LANGUAGE 'plpgsql' VOLATILE;
Inhoudsopgave
- Inleiding
- Voorbeeldcase
- Schema’s
- SQL Code en relaties
- Stored Procedures en het gebruik hiervan in je app
- Toevoegen van een order
- Voorbeeld van het gebruik in PHP
- Afsluiting