* Bonjour, *
Je voudrais mettre une colonne d'une table en lecture seule ( = interdit d'en modifier la valeur) .
On m'a parlé d'utiliser une règle sur Update .
Comment faire cette règle ?
* Merci *
* Bonjour, *
Je voudrais mettre une colonne d'une table en lecture seule ( = interdit d'en modifier la valeur) .
On m'a parlé d'utiliser une règle sur Update .
Comment faire cette règle ?
* Merci *
Il faut plutôt faire un trigger sur update qui lève une exception si l'expression old.colonne IS DISTINCT FROM new.colonne est vraie.
Utilisez une vue et faite une transformation "nulle" sur cette colonne.
Exemple :
A +
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CREATE VIEW V AS SELECT C1, C2, C3 + 0 AS C3 FROM MaTable
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Merci beaucoup , j'ai donc créé une procédure et un trigger
rq : dans la procédure , le code "is distinct from" est à préférer à l'operateur <> car il gère les null.
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 CREATE FUNCTION public.bloque() RETURNS "trigger" AS $BODY$ DECLARE BEGIN IF new.monchamp is distinct from old.monchamp THEN RAISE EXCEPTION 'Champ monchamp en lecture seule'; END IF; RETURN NEW; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; CREATE TRIGGER bloque BEFORE UPDATE ON public.matable FOR EACH ROW EXECUTE PROCEDURE bloque() ;
Partager