J'ai écrit le déclencheur suivant.Exécuter la mise à jour Toujours SET trouvé à FALSE
CREATE OR REPLACE FUNCTION tbl_scdr_insert_trigger() RETURNS TRIGGER AS $$
<<fk>>
DECLARE
rowcount int;
myrec RECORD;
BEGIN
EXECUTE 'UPDATE sc_'|| to_char(NEW.start_datetime, 'YYYY_MM') ||' SET a = a + ($1).a, b = b + ($1).b WHERE (e_id = ($1).e_id AND start_datetime = ($1).start_datetime AND c_id = ($1).c_id'
USING NEW;
GET DIAGNOSTICS rowcount = ROW_COUNT;
RAISE NOTICE 'found %', rowcount;
IF not found THEN
RAISE NOTICE 'not found';
ELSIF found THEN
RAISE NOTICE 'found';
RETURN NULL;
END IF;
END;
$$
LANGUAGE plpgsql;
Lorsque jamais appelé ce retour toujours zéro Rowcount parce que la déclaration n'est pas engagé et pourtant Found est toujours faux, même il y a des enregistrements avec les mêmes valeurs de colonnes où clause.
J'ai lu ce document et il n'y a aucune déclaration explicite à propos de Execute Update mais pourquoi rowcount est toujours Zero. puisque le déclencheur fonctionne sur une seule transaction et ne peut pas le valider. – sharafjaffri
La transaction n'a pas d'importance dans ce cas. Vous devriez avoir des diagnostics appropriés juste après l'exécution de la requête. Pouvez-vous attribuer la totalité de la chaîne de requête à une variable, puis l'augmenter comme un avis, puis exécuter cette UPDATE dans la console et voir si elle met réellement à jour quelque chose? –