From: | Virginia <mavir78(at)gmail(dot)com> |
---|---|
To: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
Cc: | Ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: duda con trigger.... |
Date: | 2009-04-08 15:15:32 |
Message-ID: | 874791d0904080815i155719d0hce84e55029dd85cc@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
El 9 de abril de 2009 10:40, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>escribió:
> Virginia escribió:
> > Buenos días... tengo un problema con un trigger que he creado para que
> > actualice un campo de una tabla según el valor de una subcadena de otro
> > campo de esa misma tabla, la función es la siguiente:
> >
> > BEGIN
> > IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN
> > UPDATE autoservicios.toi005_concepto SET tx_tipo = 'A' WHERE
> > substring(OLD.cod_concepto from 2 for 4) <'0500';
> > UPDATE autoservicios.toi005_concepto SET tx_tipo = 'D' WHERE
> > substring(OLD.cod_concepto from 2 for 4) >='0500';
> > RETURN NEW;
> > END IF;
> > END;
>
> Me temo que tu modelo tiene un error severo; le falta un poco de
> normalización. Idealmente no deberías estar haciendo un WHERE de un
> substring de un campo. Si hay información útil que necesitas en un
> WHERE en una cadena, deberías tenerla en una columna separada.
>
> De lo contrario vas a estar toda la vida peleando con problemas como
> este.
>
> --
> Alvaro Herrera
> http://www.flickr.com/photos/alvherre/
> "Siempre hay que alimentar a los dioses, aunque la tierra esté seca"
> (Orual)
>
Creo que lo mas sano será entonces hacer un script que separe la cadena y
agregar otro campo a la base de datos porque al tratar de hacer una vista
como esta:
CREATE OR REPLACE VIEW autoservicios.vm009_tope_sobre1 AS
SELECT a.tx_cedula, a.tx_nombre, a.tx_cuenta, d.tx_ubicacion, c.tx_nomina,
b.tx_periodo, to_char(b.dat_fecha::timestamp with time zone,
'dd-mm-YYYY'::text) AS dat_fecha, b.num_isrl, e.num_monto, a.co_empleado,
g.tx_banco, d.co_ubicacion, i.tx_filial
FROM autoservicios.toi009_empleado a, autoservicios.toi010_acumulado b,
autoservicios.toi004_nomina_sap c, autoservicios.toi015_ubicacion d,
autoservicios.tr001_acumulado_concepto e, autoservicios.toi005_concepto f,
autoservicios.toi001_banco g, autoservicios.toi022_grupo h,
autoservicios.toi002_filial i
WHERE a.co_empleado = b.nu_co_empleado AND a.nu_co_nomina_sap::text =
c.co_nomina_sap::text AND a.nu_co_banco = g.co_banco AND b.co_acumulado =
e.co_acumulado_concepto AND d.co_ubicacion = a.nu_co_ubicacion AND
a.nu_co_grupo::text = h.co_grupo::text AND a.nu_co_filial = i.co_filial AND
substring(f.cod_concepto::text, 2, 4) = '0001'::text;
NO DEVUELVE NADA... eso del substring(f.cod_concepto, 2, 4) = '0001' NO
FUNCIONA...
--
-----------------------------------------------------------
------------------------ Virginia ------------------------
-----------------------------------------------------------
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2009-04-08 15:20:17 | Re: duda con trigger.... |
Previous Message | Alvaro Herrera | 2009-04-08 15:10:02 | Re: duda con trigger.... |