Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > PostgreSQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-12-2010
Avatar de elistraus
elistraus elistraus is offline
Miembro
 
Registrado: jun 2008
Posts: 32
Poder: 0
elistraus Va por buen camino
problema trigger no se que hago mal

hola amigos del club delphi
tengo un problemas con un trigger que no lo se manejar, igual soy nuevo en los trigger, haber si me pueden ayudar

tengo una tabla secciones donde se crean secciones con sus modulos, formadores (profes), y un atributo tipo que es un dominio MNO(modulo normal), MES (modulo especial).
otra tabla que se llama modulo_inscrito donde se inscriben las personas a dichos modulos, la cual tiene un atributo tipo pero ese atributo quiero cargarlo mediante trigger automaticamente cuando seleccione el numero de la seccion y no puedo ya he buscado bastante y no pillo como hacerlo este error me da

control reached end of trigger procedure without return le muestro el codigo para que me ayuden si pueden please

---------------------------
pgAdmin III
---------------------------
Ha ocurrido un error:

ERROR: control reached end of trigger procedure without RETURN
CONTEXT: PL/pgSQL function "TRG_SEQ_tipo_mod_ins"
---------------------------
Aceptar
---------------------------

CREATE TABLE secciones ( codigo numeric(5,0) NOT NULL, numero numeric(4,0) NOT NULL, estado estado NOT NULL, fecha_no_vigencia date, descripcion character varying(1000), fecha_ingreso date NOT NULL, for_1_per_rut numeric(10,0) NOT NULL, for_1_per_prf_codigo numeric(5,0) NOT NULL, mod_1_codigo numeric(5,0) NOT NULL, sed_codigo numeric(5,0) NOT NULL, tipo tipo_modulo NOT NULL, CONSTRAINT sec_pk_cod PRIMARY KEY (codigo), CONSTRAINT sec_for_1_fk FOREIGN KEY (for_1_per_rut, for_1_per_prf_codigo) REFERENCES formadores (per_rut, per_prf_codigo) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT sec_mod_1_fk FOREIGN KEY (mod_1_codigo) REFERENCES modulos (codigo) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT sec_sed_fk FOREIGN KEY (sed_codigo) REFERENCES sedes (codigo) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT avcon_1290713870_estad_011 CHECK (estado::bpchar = ANY (ARRAY['VG'::bpchar, 'NV'::bpchar])), CONSTRAINT avcon_1290713870_tipo_000 CHECK (tipo::bpchar = ANY (ARRAY['MNO'::bpchar, 'MES'::bpchar])) )


CREATE TABLE modulos_inscritos ( codigo numeric(5,0) NOT NULL, estado estado NOT NULL, fecha_no_vigencia date, fecha_registro date, evaluacion_del_contenido eva_contenido, asistencia numeric(3,0), evaluacion_final eva_final, fecha_ingreso date NOT NULL, per_rut numeric(10,0) NOT NULL, per_prf_codigo numeric(5,0) NOT NULL, sec_codigo numeric(5,0) NOT NULL, tipo character varying(8), CONSTRAINT mi_pk PRIMARY KEY (per_rut, per_prf_codigo), CONSTRAINT mi_per_fk FOREIGN KEY (per_rut, per_prf_codigo) REFERENCES personas (rut, prf_codigo) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT mi_sec_fk FOREIGN KEY (sec_codigo) REFERENCES secciones (codigo) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT avcon_1290713870_estad_004 CHECK (estado::bpchar = ANY (ARRAY['VG'::bpchar, 'NV'::bpchar])), CONSTRAINT avcon_1290713870_evalu_000 CHECK (evaluacion_del_contenido::bpchar = ANY (ARRAY['SU'::bpchar, 'IN'::bpchar])), CONSTRAINT avcon_1290713870_evalu_001 CHECK (evaluacion_final::bpchar = ANY (ARRAY['APR'::bpchar, 'NPR'::bpchar])) ) WITHOUT OIDS; ALTER TABLE modulos_inscritos OWNER TO formacio; GRANT ALL ON TABLE modulos_inscritos TO formacio;


CREATE OR REPLACE FUNCTION "TRG_SEQ_tipo_mod_ins"() RETURNS "trigger" AS $BODY$ DECLARE var varchar (8); BEGIN SELECT tipo FROM secciones WHERE codigo = sec_codigo into var; IF (var = 'MES') THEN var:= 'ESPECIAL'; ELSEIF (var = 'MNO') THEN var:= 'NORMAL'; NEW.tipo := var; Return NEW; END IF; END; $BODY$ LANGUAGE plpgsql VOLATILE; ALTER FUNCTION "TRG_SEQ_tipo_mod_ins"() OWNER TO formacio;


CREATE TRIGGER trg_mod_inscrito_tipo BEFORE INSERT ON modulos_inscritos FOR EACH ROW EXECUTE PROCEDURE "TRG_SEQ_tipo_mod_ins"();


espero sirva esto

saludos
Responder Con Cita
  #2  
Antiguo 14-12-2010
Avatar de elistraus
elistraus elistraus is offline
Miembro
 
Registrado: jun 2008
Posts: 32
Poder: 0
elistraus Va por buen camino
ya he arreglado mi problema,,, la solucion fué, primero que la funcion no me retornaba nada porque el return esta dentro del if, tube que cambiar el valor del tipo de dato la columna TIPO ya que le habia dado el mismo largo que el dominio,,, espero que esto sirva de ejemplo para otros programadores,,,
saluodos
Responder Con Cita
  #3  
Antiguo 14-12-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Gracias por comentarlo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con insercion, edicion y delete en catalogo y Trigger LuNaTk MS SQL Server 6 25-04-2010 04:22:43
Cómo Hago un Autoincremento en un trigger hmrvivas MySQL 3 03-12-2008 03:03:21
Un trigger que dispara un procedimiento que dispara un trigger... sitrico Firebird e Interbase 5 04-06-2007 22:05:13
problema con TRIGGER Manuel Firebird e Interbase 7 13-09-2006 22:19:56
problema de trigger ronson Firebird e Interbase 3 01-03-2004 18:16:57


La franja horaria es GMT +2. Ahora son las 22:16:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi