Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

Next:From: nestor michelsonDate: 2004-06-01 23:12:35
Subject: Ayuda en español
Previous:From: Mario SotoDate: 2004-06-01 22:59:24
Subject: Re:

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group