problema con un trigger (PL/pgSQL)

From: "pablo adinet" <pejota(at)adinet(dot)com(dot)uy>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: problema con un trigger (PL/pgSQL)
Date: 2005-02-03 17:11:28
Message-ID: 006301c50a13$66964e30$0201a8c0@preprensa
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Juan Pablo Espino 2005-02-03 17:19:34 Funciones en C + Windows
Previous Message Martín Marqués 2005-02-03 15:29:55 Re: Problemas con postgres