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
Message posté par : barthsdee
----------------------------------------
Bonjour,
Je suis un débutant POSTGRE et je coince sur une jointure de table:
J'ai une table A incluant 3 colonnes
- Source1
- Source2
- Source3
Les valeurs de ces trois colonnes font référence à une autre table b à deux colonnes
- idsource
- libsource
Si je tente
From a
Left join b on a.source1=b.idsource
Je peux dès lors rapatrier l'information libsource dans ma base initiale
Mais je ne peux pas appliquer la même méthode pour les colonnes Source 2 ET 3.
Je dois peut être utilisé autre chose comme opérateur?
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=352587#p352587
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
Message posté par : m_mclr (mauclair.margaux(a)gmail.com)
----------------------------------------
Bonjour à tous,
Je débute avec les triggers et j'ai du mal a comprendre la mise en forme de la requête...
J'ai deux tables, une de ponctuels relative à des places et une de polygone relative à des quartiers
J'aimerai pouvoir mettre à jour (lors de la création d'une place) le nom du quartier dans lequel elle se trouve
Dans ma table "place" j'ai le champ "id_quartier" qui est lié par une relation Fk à ma table "quartier" et ainsi je peux récupérer le "nom_quartier"
J'ai essayé le trigger suivant , mais malheureusement je n'obtiens pas le résultat escompté..
-----------------
Code :
CREATE OR REPLACE FUNCTION set_quartier()
RETURNS trigger AS
$BODY$
DECLARE
BEGIN
IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE'
THEN UPDATE place
SET id_quartier = quartier.id_quartier
FROM quartier WHERE st_contains(quartier.geom, NEW.geom);
END IF;
return NEW;
END;
$BODY$
LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER set_quartier_trig
AFTER INSERT OR UPDATE
ON place
FOR EACH ROW
EXECUTE PROCEDURE set_quartier();
-----------------
Merci d'avance! :) Margaux
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=352550#p352550
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