Estas seguro que funcionaba antes?, por lo que veo el problema esta en la 
creación del trigger no en la función:

> CREATE TRIGGER numeracion
>   AFTER INSERT
>   ON con_diario
>   FOR EACH ROW
>   EXECUTE PROCEDURE func_numeracion();

Esta creado AFTER y la función modifica numero y retorna NEW pero el INSERT ya 
paso. Esto quiere decir que el UPDATE en la tabla fe_numeraciones se ejecuta 
pero NEW.numero := id; no tiene ningún efecto.

Cambia la forma de crear el trigger y debería funcionar:

CREATE TRIGGER numeracion
  BEFORE INSERT
  ON con_diario
  FOR EACH ROW
  EXECUTE PROCEDURE func_numeracion();

Saludos.

Edgardo Hernandez.

> El 15-04-2018, a las 18:59, jvenegasperu <jvenegasp...@gmail.com> escribió:
> 
> Buen dia a todos
> 
> tengo esta funcion y trigger y no me esta actualizando el valor correctamente 
> en 9.6 funciona bien en 10 no alguna ayuda?
> el campo numero de la tabla se queda null.
> 
> es como si funcionara todo excepto esta linea 
> 
> new.numero := id;
> 
> CREATE OR REPLACE FUNCTION func_numeracion()
>   RETURNS trigger AS
> $BODY$
>   DECLARE
>     id INTEGER;
>   BEGIN   
>     --SELECT numero FROM fe_numeraciones where doc = NEW.doc and serie = 
> NEW.serie LIMIT 1 INTO id FOR UPDATE;
>     SELECT numero FROM fe_numeraciones where doc = NEW.doc and serie = 
> NEW.serie LIMIT 1 INTO id;    
>     update fe_numeraciones set numero = id + 1 where doc = New.doc and serie 
> = NEW.serie;
>     NEW.numero := id;
>   RETURN NEW;
>   END;
> $BODY$
>   LANGUAGE plpgsql VOLATILE
>   COST 100;
> ALTER FUNCTION func_numeracion()
>   OWNER TO postgres;
> 
>   END;
> $BODY$
>   LANGUAGE plpgsql VOLATILE
>   COST 100;
> ALTER FUNCTION func_numeracion()
>   OWNER TO postgres;
> 
> -- DROP TRIGGER fn ON fe_retencion;
> CREATE TRIGGER numeracion
>   AFTER INSERT
>   ON con_diario
>   FOR EACH ROW
>   EXECUTE PROCEDURE func_numeracion();
>     
> 
> -- 
> José Mercedes Venegas Acevedo
> cel Mov RPC 964185205
> 
> 

Reply via email to