Correction trigger avec un if exists
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:
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.