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