Bonjour à tous et merci d'avance pour votre aide.
Depuis cet après-midi, j'essaie de mettre en œuvre une série de triggers pour vérifier des règles d'héritage.
En somme, un utilisateur peut être un administrateur ou un membre. Et un membre peut-être soit un client, soit un vendeur.
L'idée est de créer un trigger BEFORE INSERT ET UPDATE pour admins, members, customers et vendors.
Chacun renvoie vers la même routine pour vérifier si un même ne ID se trouve déjà par dans la table fille opposée.
Merci pour votre précieuse aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45 --============================================================== -- PROCEDURE --============================================================== CREATE OR REPLACE FUNCTION check_inherits() RETURNS TRIGGER AS $$ DECLARE tableName VARCHAR; columnName VARCHAR; valueCheck VARCHAR; BEGIN tableName := TG_ARGV [0] || 's'; columnName := 'id_' || TG_ARGV [0]; valueCheck := 'id_' || TG_ARGV [1]; RAISE NOTICE tableName; IF EXISTS(SELECT 1 FROM tableName WHERE columnName = new.valueCheck) THEN END IF; RETURN FALSE; END; $$ LANGUAGE plpgsql; --============================================================== -- TRIGGERS --============================================================== CREATE TRIGGER check_admin BEFORE INSERT OR UPDATE ON admins FOR EACH ROW EXECUTE PROCEDURE check_inherit('member', 'admin'); CREATE TRIGGER check_member BEFORE INSERT OR UPDATE ON members FOR EACH ROW EXECUTE PROCEDURE check_inherit('admin', 'member'); CREATE TRIGGER check_customer BEFORE INSERT OR UPDATE ON customers FOR EACH ROW EXECUTE PROCEDURE check_inherit('vendor', 'customer'); CREATE TRIGGER check_vendor BEFORE INSERT OR UPDATE ON vendors FOR EACH ROW EXECUTE PROCEDURE check_inherit('customers', 'vendor');
Partager