Re: Problema con trigger

From: "Mario Soto" <mario_soto(at)venezolanadeavaluos(dot)com>
To: <diego(at)adminsa(dot)com>
Cc: <mario_soto(at)venezolanadeavaluos(dot)com>, <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Problema con trigger
Date: 2004-06-01 23:03:00
Message-ID: 47947.200.35.66.77.1086130980.squirrel@mail.venezolanadeavaluos.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola, asi esta definida la tabla detmodelo pero no funciona

CREATE TABLE "public"."detmodelo" (
"co_modelo" INTEGER NOT NULL,
"co_campo" INTEGER NOT NULL,
"nu_activo_fijo" VARCHAR NOT NULL,
"va_campo" VARCHAR(255),
"sq_serialcolumn" SERIAL,
"id_usuario" VARCHAR(15) NOT NULL,
CONSTRAINT "detmodelo_pkey" PRIMARY KEY("co_modelo", "co_campo",
"nu_activo_fijo"),
CONSTRAINT "detmodelo_sq_serialcolumn_key" UNIQUE("sq_serialcolumn"),
CONSTRAINT "detmodelo_fk_modelo" FOREIGN KEY ("co_modelo", "co_campo")
REFERENCES "public"."modelo"("co_modelo", "co_campo")
ON DELETE CASCADE
ON UPDATE NO ACTION
NOT DEFERRABLE
) WITH OIDS;

> Hola,
>
> Deberías utilizar una "foreign key",
>
> ALTER TABLE detmodel ADD CONSTRAINT detmodelo_fk1 FOREIGN KEY(co_modelo,
> co_campo) REFERENCES modelo(co_modelo, co_campo) ON DELETE CASCADE;
>
> Esto no solo hace que al eliminar un registro de modelo se eliminen los
> registros vinculados de detmodelo sino que también garantiza la
> integridad referencial, es decir que no se inserte ningun registro en
> detmodelo que no tenga el correspondiente registro en modelo.
>
> Espero que te sea útil.
>
> Saludos,
>
> Diego.
>
> On mar, 2004-06-01 at 13:53, Mario Soto wrote:
>
>> Hola lista, tengo un problema:
>>
>> tengo 2 tablas modelo y detmodelo:
>>
>> ambas tienen los campos co_modelo y co_campo;
>>
>> cuando borro un registro en la tabla modelo, tambien quiero que se
>> borren los registros en la tabla detmodelo, para lom cual he crado un
>> triger para la table modelo:
>>
>> CREATE TRIGGER "delete_desmodelo" BEFORE DELETE
>> ON "public"."modelo" FOR EACH ROW
>> EXECUTE PROCEDURE "public"."sp_delete_desmodelo"();
>>
>>
>>
>> y el procedure es:
>>
>>
>>
>> CREATE OR REPLACE FUNCTION "public"."sp_delete_desmodelo" () RETURNS
>> trigger AS'
>> begin
>> /* New function body */
>> delete from detmodelo
>> where co_modelo = old.co_modelo and co_campo = old.co_campo;
>>
>> return null;
>> end;
>> 'LANGUAGE 'plpgsql' IMMUTABLE CALLED ON NULL INPUT SECURITY INVOKER;
>>
>>
>> El problema es que no me elimina nada:
>>
>> Alguna idea.
>>
>> Gracias
>>
>>
>>
>>
>> ---------------------------(end of
>> broadcast)--------------------------- TIP 5: ¿Has leído nuestro
>> extenso FAQ?
>>
>> http://www.postgresql.org/docs/faqs/FAQ.html
>
> Diego A. Gil
> Director
> Admin S.A.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message nestor michelson 2004-06-01 23:12:35 Ayuda en español
Previous Message Mario Soto 2004-06-01 22:59:24 Re: