Vous n'êtes pas identifié(e).

#1 08/08/2013 14:32:15

elsane2908
Membre

trigger entre deux tables : partage d'id

Bonjour à tous,

après plusieurs tentatives et des recherches sur mon ami google je reste sur un échec ! je me tourne alors vers vous pour m'aider.

j'ai deux tables avec plusieurs champs mais je ne cite que ceux qui m'intéresse :
sb_data_44 avec comme identifiant rowid(serial) et un champ id_tblcommerce (integer)
tbl_commerce_test avec un champ identifiant id_commerce(serial) et un champ rowid_tbldata44

mon objectif est que chaque table reçoit l'identifiant de l'autre après une insertion (le tout en gérant éventuellement des accès simultanés)
Hors je n'arrive pas à recevoir l'id ( id_commerce) de la table tbl_commerce_test dans la table sb_data_44 (sur le champ id_tblcommerce).
tbl_commerce_test reçoit bien lui l'identifiant de sb_data_44.

je suis sur un système figé où les données sont utilisées et gérées dans par un premier logiciel métier, et dont l'organisation ne permet d'être attaquée par un second logiciel ... d'où mon besoin de faire coincider les identifiants.

je soupçonne mon update en fin de fonction, je l'ai placé ailleurs mais rien ...

voici ma fonction

CREATE OR REPLACE FUNCTION base_sig.fct_synchro()
  RETURNS trigger AS
$BODY$
DECLARE idc integer;
DECLARE rid_dyn integer;

BEGIN
 
IF (TG_OP = 'DELETE') THEN
		DELETE FROM sch_t1_commerce.tbl_commerce_test WHERE rowid_tbldata44=OLD.rowid;
		IF NOT FOUND THEN RETURN NULL; END IF;
		RETURN OLD;
ELSIF (TG_OP = 'INSERT') THEN
		INSERT INTO sch_t1_commerce.tbl_commerce_test (rowid_tbldata44) VALUES (rid_dyn)	;

		RETURN NEW;	
END IF;
	
RETURN NULL; 


SELECT tbl_commerce_test.id_commerce into idc FROM sch_t1_commerce.tbl_commerce_test, base_sig.sb_data_44 WHERE tbl_commerce_test.rowid_tbldata44=rid_dyn;
UPDATE base_sig.sb_data_44 SET id_tblcommerce = idc WHERE sb_data_44.rowid=rid_dyn;


END;

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION base_sig.fct_synchro()
  OWNER TO postgres;

et mon trigger :

CREATE TRIGGER tg_synchro
AFTER INSERT OR UPDATE OR DELETE
ON base_sig.sb_data_44
FOR EACH ROW
EXECUTE PROCEDURE base_sig.fct_synchro();
ALTER TABLE base_sig.sb_data_44;

Merci pour vos conseils

Hors ligne

#2 08/08/2013 16:28:08

SAS
Membre

Re : trigger entre deux tables : partage d'id

Bonjour,

Le return NULL; de votre fonction vous oblige à la quitter avant le select et l'update, il me semble.


Stéphane Schildknecht
Conseil, formations et support PostgreSQL
http://www.loxodata.com

Hors ligne

#3 12/08/2013 19:53:38

gleu
Administrateur

Re : trigger entre deux tables : partage d'id

Votre demande n'est pas très compréhensible comme ça. Essayez de faire un exemple avec un jeu de tables simples et indiquez le schéma que vous obtenez ainsi (structure des tables, contenu de la fonction, déclaration du trigger). Ce sera bien plus simple pour vous aider.


Guillaume.

Hors ligne

Pied de page des forums