El 9 de abril de 2009 10:40, Alvaro Herrera <[email protected]>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 ------------------------ -----------------------------------------------------------
