Re: problema con un trigger (PL/pgSQL)

From: Pablo Marrero <pablo(dot)marrero(at)bancaqm(dot)com(dot)uy>
To: pablo adinet <pejota(at)adinet(dot)com(dot)uy>
Cc: AyudaPostgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: problema con un trigger (PL/pgSQL)
Date: 2005-02-03 18:15:28
Message-ID: 1107454528.3292.238.camel@badesa05.desarrollo.bancaqm.com.uy
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Proba cambiandole el nombre a las variables venta, compra y valor porque
se llaman igual que las columnas de la tabla servicio_his. A mi me paso
algo parecido hace algun tiempo y era por un tema parecido.........

saludos pablo

El jue, 03-02-2005 a las 14:11, pablo adinet escribió:
> Hola a todos, tengo un error en esta funcion que utilizo en un trigger.
> Estoy haciendo pruebas y no logro hacerla funcionar...
>
> Esto es lo que me pasa al lanzarla:
>
> pruebas=# update servicio set preciobase=150 where id=1;
> NOTICE: Servicio 1
> NOTICE: Moneda 2
> NOTICE: Venta 25.00
> NOTICE: Compra 25.00
> NOTICE: Valor 25.00
> NOTICE: Precio 120.00
> ERROR: syntax error at or near "$1" at character 36
> CONTEXT: PL/pgSQL function "bu_servicio" line 42 at SQL statement
>
> y este es el codigo:
>
> -- Antes de Update
> CREATE OR REPLACE FUNCTION BU_servicio() RETURNS trigger AS '
> DECLARE
> msgError VARCHAR;
> fecha DATE;
> fechamin DATE;
> venta DECIMAL;
> compra DECIMAL;
> valor DECIMAL;
> rcot cotizacion %ROWTYPE;
> BEGIN
> -- Controlo
> msgError = '''';
> SELECT
> CTR_servicio(NEW.codigo,NEW.nombre,NEW.moneda,NEW.tipoiva,NEW.preciobase,NEW
> .aplicarcoef) INTO msgError;
> IF msgError <> '''' THEN
> RAISE EXCEPTION ''%'', msgError;
> END IF;
> -- Cambio de precio
> IF OLD.moneda <> NEW.moneda OR OLD.preciobase <> NEW.preciobase THEN
> -- Inicializo
> fecha := current_date;
> venta := 0;
> compra := 0;
> valor := 0;
> SELECT MIN(cotizacion.fecha) INTO fechamin FROM cotizacion
> WHERE cotizacion.moneda = OLD.moneda;
> IF FOUND THEN
> IF fecha < fechamin THEN
> fecha := fechamin;
> END IF;
> -- Pido Cotizacion
> SELECT * INTO rcot FROM
> DoyCotizacion(OLD.moneda,fecha);
> venta := rcot.venta;
> compra := rcot.compra;
> valor := rcot.valor;
> END IF;
> RAISE NOTICE ''Servicio %'', OLD.id;
> RAISE NOTICE ''Moneda %'', OLD.moneda;
> RAISE NOTICE ''Venta %'', venta;
> RAISE NOTICE ''Compra %'', compra;
> RAISE NOTICE ''Valor %'', valor;
> RAISE NOTICE ''Precio %'', OLD.preciobase;
> -- Agrego registro a historico
> INSERT INTO
> servicio_his(servicio,fecha,moneda,preciobase,venta,compra,valor) VALUES
>
> (OLD.id,current_date,OLD.moneda,OLD.preciobase,venta,compra,valor);
> -- Cambio fecha actualizacion
> NEW.fecultact := current_date;
> END IF;
> RETURN NEW;
> END;
> ' LANGUAGE 'plpgsql';
>
> gracias
>
>
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 2: puedes desuscribirte de todas las listas simultaneamente
> (envie "unregister TuDireccionDeCorreo" a majordomo(at)postgresql(dot)org)
--

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Majin Boo 2005-02-03 18:26:29 Sobre sistemas de archivos
Previous Message Alvaro Herrera 2005-02-03 18:00:06 Re: Funciones en C + Windows