Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question- Function: test_copie_colonne()
-- DROP FUNCTION test_copie_colonne();
CREATE OR REPLACE FUNCTION test_copie_colonne()
RETURNS trigger AS
$BODY$-- SELECT [DISTINCT ou ALL] * ou liste_de_colonnes FROM nom_des_tables_ou_des_vues
DECLARE
TableOrigine numeric;
TableCopie numeric
BEGIN
SELECT INTO TableCopie colonne_copie() AS NUMERIC;
SELECT INTO TableOrigine colonne_origine () AS NUMERIC;
NEW.colonne_copie := NEW.colonne_origine ;
RETURN NEW;
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION test_copie_colonne()
OWNER TO postgres;
CREATE TRIGGER "TEST_COPIE_COLONNE"
BEFORE INSERT OR UPDATE
ON TableCopie
FOR EACH ROW
EXECUTE PROCEDURE test_copie_colonne();
ALTER TABLE TableCopie DISABLE TRIGGER "TEST_COPIE_COLONNE";
20 janv. 2014 à 18:44
concernant les "cursors .." , je voulais appliquer la méthode de ce lien
http://docs.postgresql.fr/8.0/plpgsql-cursors.html
Je vais avoir une trentaine de triggers plus complexes ( graphiques) à faire ensuite, c'est pour ça que j'aurai voulu utiliser cette méthode.
Si ça marche pas j'y reviendrai plus tard, je débute...
Pour le test, je vais l'enlever et vais le remettre ensuite après l'avoir vérifié.
C'est peut être pas ce qu'il faut faire.
Demain Je vais essayer avec ta requête, cela me parait plus simple et je te tiens au courant, pourras tu me donner un coup de pouce si je me plante ?
Je comprends pas pourquoi tu m'indiques "inserted doit correspondre à ma table New" , tout les opérations se font dans la même table ?
Je vais bosser les triggers en parallèle.
alors si qq maîtrise les triggers, surtout ne pas hésitez à me mettre sur la voie.
merci encore
20 janv. 2014 à 19:14
Dans mon exemple la table "inserted" contient les enregistrements ajoutés ou modifiés, c'est de la terminologie SQL Serveur,
mais en postgress les triggers sont un peu différents car tu dois pouvoir affecter directement la colonne resultat
Soit quelque chose comme
Modifié par post35 le 4/02/2014 à 12:36
J'ai "potassé" un trigger avec de l'aide et en suis arrivé à cela qui fonctionne parfaitement bien.
IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
NEW.art_dec_surfaceutile := NEW.art_dec_coefchutearticlepopup * CAST(NEW.art_vch_surface as numeric);
IF (NEW.art_vch_surface IS NOT NULL) THEN
NEW.art_dec_surfaceutile := NEW.art_dec_coefchutearticlepopup * CAST(NEW.art_vch_surface as numeric);
Par contre, je tombe sur une autre difficulté, je vais essayer de m'expliquer :
Lorsque j'envoie mes données de calcul via mon IHM, les calculs de résultats se font et mes données sont correctement updatées dans ma table avec le trigger ci-dessus.
Mais... mon résultat calculé ne reviens pas dans mon IHM si je change mes variables de calculs, je suis obligé de vider le cache pour la donnée updatée de ma table s'affiche dans mon IHM.
j'ai essayé de copier mon résultat après calcul dans un autre champ de la même table en ajoutant cela dans ma fonction trigger, pensant que je contournerai le cache :
BEGIN
IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
NEW.art_dec_surfaceutile := NEW.art_dec_coefchutearticlepopup * CAST(NEW.art_vch_surface as numeric);
IF (NEW.art_vch_surface IS NOT NULL) THEN
NEW.art_dec_surfaceutile := NEW.art_dec_coefchutearticlepopup * CAST(NEW.art_vch_surface as numeric);
------------AJOUT pour copie du resultat dans une autre table-----------
IF (NEW.art_dec_surfaceutilecalcul != NEW.art_dec_surfaceutile) THEN
set art_dec_surfaceutile = art_dec_surfaceutilecalcul;
END IF;
FIN AJOUT ---------------------------------------------------------------------------
END IF;
END IF;
RETURN NEW;
END;
et ça plante.... un problème de chrono ?
je vais essayer ce que me dit yann_lo_san (post ci dessous)
Que faire pour résoudre ce problème, est ce que je suis sur la bonne méthode pour ça ,
Pour info, je bosse avec struts
merci, et simple si possible , je suis toujours débutant ..
Je dois faire une erreur qqpart, ça me plante glassfish ....