no se mucho de plpgsql pero fijate que
NEW.item_id != NEW.item_id
nunca va a dar true
Otra tema: en un trigger que no sea del tipo "instead of" no tenés que
ejecutar la sentencia sobre la cual trabaja el trigger, ya que esta se
ejecuta sola si es que no hay un rollback.



Saludos
~~~~~~~~~~~~~~~
Guillermo Villanueva


2010/6/10 Henrry Joshney Servitá Sánchez <[email protected]>

> buenas tengo las siguientes tablas.
>
> CREATE TABLE item
> (
>  item_id serial NOT NULL,
>  description character varying(64) NOT NULL,
>  cost_price numeric(7,2),
>  sell_price numeric(7,2),
>  CONSTRAINT item_pk PRIMARY KEY (item_id)
> )
> WITH (
>  OIDS=FALSE
> );
>
> CREATE TABLE stock
> (
>  item_id integer NOT NULL,
>  quantity integer NOT NULL,
>  CONSTRAINT stock_pk PRIMARY KEY (item_id)
> )
> WITH (
>  OIDS=FALSE
> );
>
> estoy creando un trigger que me controle al momento de insertar un nuevo
> registro en la tabla item se inserte otro registro en la tabla stock con el
> campo item_id de la tabla iten y el quantity con el valor 0.
>
> esta es la funcion que cree
>
> CREATE OR REPLACE FUNCTION nuevo_producto() RETURNS trigger AS
> $BODY$
> declare
>        codigo int;
> BEGIN
> if (TG_OP='INSERT' ) THEN
>        IF  (NEW.item_id != NEW.item_id) then
>
>
>                        INSERT INTO item VALUES (item_id,
> description,cost_price,sell_price);
>
>                        insert into stock values(item.item_id,0);
>
>        ELSE
>                RAISE NOTICE 'fallo';--, quantity;  -- Prints 30
>
>        END IF;
> end if;
> RETURN null;
> END;
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE;
>
> create  trigger insertar_producto
> after insert on item
> for each row
> execute procedure nuevo_producto();
>
>
> espero que haya sido claro y puedan ayudarme muchas gracias.
>
> saludos
>
>
>
> -
> Enviado a la lista de correo pgsql-es-ayuda ([email protected]
> )
> Para cambiar tu suscripción:
> http://www.postgresql.org/mailpref/pgsql-es-ayuda
>

Responder a