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.

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');
Merci pour votre précieuse aide.