2008/11/10 Erik Ferney Cubillos Garcia <[EMAIL PROTECTED]>: > Buenos Días, Tardes, noches > > bueno verán tengo el siguiente Trigger con su respectiva función que se > ejecuta luego de hacer un DELETE, pero tengo un problema cada vez que > elimino un registro me sale el siguiente error > > > ERROR: record "new" is not assigned yet > DETAIL: The tuple structure of a not-yet-assigned record is indeterminate. > CONTEXT: PL/pgSQL function "ftBiEmpleU" line 43 at SQL statement > > ********** Error ********** > > ERROR: record "new" is not assigned yet > SQL state: 55000 > Detail: The tuple structure of a not-yet-assigned record is indeterminate. > Context: PL/pgSQL function "ftBiEmpleU" line 43 at SQL statement > > > aqui les dejo el trigger y la función > > CREATE TRIGGER "TgDBiEmple" > AFTER DELETE > ON bi_emple > FOR EACH ROW > EXECUTE PROCEDURE "ftBiEmpleD"(); > > y la función > > CREATE OR REPLACE FUNCTION "ftBiEmpleD"() > RETURNS trigger AS > $BODY$ > DECLARE > lDcCodTerc NUMERIC(13, 0); > lDccodempl NUMERIC(13, 0); > lSmCodEmpr INTEGER; > lSmCodDete INTEGER; > BEGIN > -- Se Verifica la existencia del Detalle Cliente en la entidad Detalle > Terceros (gn_deter) > LsmCodDete := NULL; > > select into lSmCodDete > cod_dete > from gn_deter > where cod_empr = old.cod_empr and > cod_terc = old.cod_empl and > UPPER(ini_modu) = UPPER('NM'); > > -- Si no existe el tercero se inicializa su creación > IF lSmCodDete IS NOT NULL THEN > BEGIN > --print 'no es nulo el deter (Encontro)' > delete from gn_deter > where cod_empr = old.cod_empr and > cod_terc = old.cod_empl and > UPPER(ini_modu) = UPPER('NM'); > > if exists(select * from pg_tables where tablename = ('cn_terce')) > then > begin > delete from cn_terce > where cod_empr = old.cod_empr and > cod_terc = old.cod_empl; > end; > end if; > > if exists(select * from pg_tables where tablename = ('ts_terce')) > then > begin > delete from ts_terce > where cod_empr = old.cod_empr and > cod_terc = old.cod_empl; > end; > end if; > > delete from gn_termo > where cod_empr = old.cod_empr and > cod_terc = old.cod_empl and > UPPER(ini_modu) = UPPER('NM'); > > delete from gn_terce > where cod_empr = old.cod_empr and > cod_terc = old.cod_empl; > > end; > end if; > > RETURN OLD; > > END; > > $BODY$ > LANGUAGE 'plpgsql' VOLATILE > COST 100; > > ALTER FUNCTION "ftBiEmpleD"() OWNER TO postgres; > > GRANT EXECUTE ON FUNCTION "ftBiEmpleD"() TO public; > GRANT EXECUTE ON FUNCTION "ftBiEmpleD"() TO postgres; > > > el return de la función lo he modificado por > > RETURN NULL; > RETURN NEW; > RETURN OLD; > > pero nada, sigue saliendo el mismo error, > > espero me puedan ayudar, > > Gracias > > > -- > Atentamente, > > > ______________________________ > ERIK FERNEY CUBILLOS GARCIA > Ing. Desarrollo - Kactus HR > DIGITAL WARE LTDA. > Calle 72 No. 12-65 Piso 2 > Bogotá, Colombia > [EMAIL PROTECTED] > www.digitalware.com.co >
un trigger de delete no puede tener NEW, sólo OLD Saludos, Alejandro -- TIP 8: explain analyze es tu amigo