efectivamente estaba haciendo mal el trigger...


lo hice de la siguiente forma...y quisiera saber su punto de vista.



muchicimas gracias!!!




CREATE OR REPLACE FUNCTION educaciondistancia.insert_matricula_maestria()

  RETURNS trigger AS

$BODY$

DECLARE

        matricula record ;

BEGIN


     PERFORM * FROM educaciondistancia.alumnos WHERE matriculamaestria = 
NEW.matriculamaestria;

       IF FOUND THEN

            raise exception 'La matricula que desea insertar ya existe';

       END IF;

RETURN NEW;

END;

$BODY$

  LANGUAGE plpgsql VOLATILE

  COST 100;

ALTER FUNCTION educaciondistancia.insert_matricula_maestria()

  OWNER TO postgres;





-- DROP TRIGGER tr_insert_matricula_maestria ON educaciondistancia.alumnos;


CREATE TRIGGER tr_insert_matricula_maestria

  BEFORE INSERT

  ON educaciondistancia.alumnos

  FOR EACH ROW

  EXECUTE PROCEDURE educaciondistancia.insert_matricula_maestria();




________________________________
De: Hellmuth Vargas <hiv...@gmail.com>
Enviado: viernes, 30 de septiembre de 2016 11:47:44
Para: Emanuel Calvo
Cc: Maria Antonieta Ramirez; FORO POSTGRES
Asunto: Re: [pgsql-es-ayuda] DUDA ACERCA DE TRIGGER

Hola Lista

yo tengo una duda adicional, como quiere evitar duplicado de matriculamaestria 
en educaciondistancia.alumnos  porque no colocar un UNIQUE sobre el campo y 
manejar la excepci?n?

El 30 de septiembre de 2016, 11:43, Emanuel 
Calvo<3man...@gmail.com<mailto:3man...@gmail.com>> escribi?:


Estas generando una llamada infinita al disparador, con eso no hay stack que 
aguante.

Si lo que est?s queriendo hacer es manipular los argumentos NEW para checkeo 
(como veo en tu funci?n) u otras cosas,
no es necesario usar un INSERT, solo retorna NEW.* . A?n as?, lo que est?s 
queriendo hacer es algo que
ya se implementa a trav?s de una CONSTRAINT con UNIQUE, a menos que est? 
omitiendo algo.



On Thu, Sep 29, 2016 at 9:05 PM Maria Antonieta Ramirez 
<marami...@ulsaneza.edu.mx<mailto:marami...@ulsaneza.edu.mx>> wrote:

Buen dia..


solicito su ayuda para una duda que tengo ..


hice un trigger en el que antes de insertar un registro valide si existe una 
matricula para lo cual hice lo siguiente.




CREATE OR REPLACE FUNCTION educaciondistancia.insert_matricula_maestria()

  RETURNS trigger AS

$BODY$

DECLARE

        matricula record ;

BEGIN


     SELECT * INTO matricula FROM educaciondistancia.alumnos WHERE 
matriculamaestria = NEW.matriculamaestria;

       IF NOT FOUND THEN

           INSERT INTO educaciondistancia.alumnos (

              nombre , apellidopaterno , apellidomaterno, sexo , fechanac , 
lugarnac , nacionalidad , calle, numext, numint, colonia ,ciudad, 
municipio,estado,pais,cp, telefono,

              telcelular,ocupacion,estatus, 
email,nickname,foto,fecharegistro,matriculamaestria,aspirantemaestria,grupo, 
folioaspirante)

           VALUES (

              NEW.nombre , NEW.apellidopaterno , NEW.apellidomaterno, NEW.sexo 
, NEW.fechanac , NEW.lugarnac , NEW.nacionalidad , NEW.calle, NEW.numext, 
NEW.numint, NEW.colonia , NEW.ciudad, NEW.municipio, NEW.estado, NEW.pais, 
NEW.cp, NEW.telefono, NEW.

              telcelular, NEW.ocupacion, NEW.estatus, NEW.email, NEW.nickname, 
NEW.foto, NEW.fecharegistro, NEW.matriculamaestria, NEW.aspirantemaestria, 
NEW.grupo, NEW.folioaspirante);


       END IF;

RETURN NEW;

END;

$BODY$

  LANGUAGE plpgsql VOLATILE

  COST 100;

ALTER FUNCTION educaciondistancia.insert_matricula_maestria()

  OWNER TO postgres;




CREATE TRIGGER tr_insert_matricula_maestria

  BEFORE INSERT

  ON educaciondistancia.alumnos

  FOR EACH ROW

  EXECUTE PROCEDURE educaciondistancia.insert_matricula_maestria();







******


cuando hice pruebas por medio de pgadmin insertando mi registro , no me mando 
ningun problema. pero el dia de hoy lo probe de nuevo y en uno de los intentos 
de las pruebas me mando el siguiente mensaje:



[X]



me podrian apoyar en saber a que se refiere.


Por su atencion muchas gracias!!!







--
Cordialmente,

Ing. Hellmuth I. Vargas S.
Esp. Telem?tica y Negocios por Internet
Oracle Database 10g Administrator Certified Associate
EnterpriseDB Certified PostgreSQL 9.3 Associate

Responder a