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
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 |