Message posté par : Kiecane
----------------------------------------
Bonjour,
Je suis assez novice en langage Postgre/SQL et j'aurais besoin de votre aide.
J'essaye d'écrire un script pour imposer des contraintes sur les valeurs des
champs d'une table qui seront saisies par l'utilisateur dans l'application qui
découlera de la base de données que je suis en train de constituer. J'ai une table
capture_piege qui étudie les captures d'espèces d'intérêt dans des pièges.
J'ai créé les champs suivants dans mon type-entité : pk_suivi (associé à un jour de
suivi d'un piège localisé à un emplacement précis), date_suivi, animal_capture (TRUE
lorsqu'un ou plusieurs animaux sont capturés dans le piège), nb_ind (nombre
d'individu lorsqu'une capture a eu lieu), id_espece_interet (identifiant de
l'espèce capturée SI elle correspond à une des espèces recherchées (numéro TAXREF A,
B, C ou D) ; NULL sinon ***), photo, animal_vivant (TRUE si l'animal capturé est
vivant au moment de relever le piège)
*** la table capture_piege est reliée à une autre table num_espece qui liste les numéros
TAXREF de toutes les espèces et leur libellé (nom de l'espèce) associé. Parmi toutes
ces espèces, seules 4 d'entre elles (A, B, C et D) correspondent aux espèces
d'intérêt que l'on souhaite capturer avec ce piège. La table capture_piege a donc
comme clé étrangère fk_num_espece associée à la table num_espece (cardinalités 1,1 et
0,n).
On a id_espece_interet qui ne correspond pas au numéro TAXREF, c'est un identifiant au
format : espèce_AAAA_n° avec :
- les trois première lettres du libelle de l'espèce de la table num_espece
- suivi de l'année de capture dans le piège
- suivi d'un numéro qui correspond à la nème capture de cette espèce dans l'année
(par exemple, il est égal à 3 si c'est le 3e individu de cette espèce que l'on
capture cette année-là)
Il faudrait donc aussi que je trouve comment créer automatiquement ce numéro mais
j'avoue que je ne sais pas trop comment faire pour le moment. Je ne sais pas non plus
si je dois le faire dans mon déclencheur ou à un autre endroit. Qu'en pensez-vous ?
Voici le déclencheur que j'ai écrit pour le moment :
CREATE FUNCTION capture_tri() RETURNS TRIGGER AS $BODY$
DECLARE
capture BOOL;
BEGIN
SELECT animal_capture INTO capture FROM capture_piege WHERE pk_suivi=NEW.pk_suivi;
IF capture IS FALSE
THEN (nb_ind='0' AND id_espece_interet='0' AND photo='0' AND
animal_vivant='0')
IF capture IS TRUE AND (fk_num_espece!='A' OR fk_num_espece!='B' OR
fk_num_espece!='C' OR fk_num_espece!='D')
THEN nb_ind>0 AND (id_espece_interet IS NULL)
END IF;
END ;
$BODY$ LANGUAGE 'plpsql'
CREATE TRIGGER capture_tri AFTER INSERT OR UPDATE ON animal_capture
FOR EACH ROW EXECUTE PROCEDURE capture_tri();
Pour écrire ça je me suis inspirée de ce que j'ai trouvé sur internet et dans des
livres mais je ne suis pas sûre que cela fonctionne, et comme je n'ai pas encore les
données pour constituer ma base de données, je ne peux pas le vérifier pour l'instant.
Pourriez-vous m'indiquer si cela vous paraît correct s'il-vous-plaît ?
Merci d'avance à tous ceux qui voudront bien m'aider:) !
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=352756#p352756
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net