From: | "Fernando Hevia" <fhevia(at)ip-tel(dot)com(dot)ar> |
---|---|
To: | <gherzig(at)fmed(dot)uba(dot)ar>, <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | RE: problema usando regexp_replace |
Date: | 2010-01-12 15:36:50 |
Message-ID: | 10E7298EA98449C59CDC082DD7CBA113@iptel.com.ar |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
> -----Mensaje original-----
> De: gherzig(at)fmed(dot)uba(dot)ar
>
> Hola a todos/as: Estoy aqui con una funcion que utiliza
> regexp_replace, pero en lugar de sustituir por un texto,
> quiero sustituir por el resultado de otra funcion, pasandole
> como argumentos, lo que capture previamente (en
> 2 grupos)
>
> Este es un pequeño ejemplo con un registro cualquiera:
> SELECT formato from tabla where id=1;
> <TR><TD>{Funcion_1.842}</TD></TR></TBODY></TABLE><TABLE><TBODY
><TR><TD>{Funcion_2.842A}</TD>[snip]
>
> La idea es tomar eso que esta entre {}, lo que esta a la
> izquierda del punto es el primer argumento, y el resto el
> segundo argumento para pasarles a la "funcion reemplazadora".
>
> *Para simplificar*, la "funcion reemplazadora" solo hace esto:
> CREATE OR REPLACE FUNCTION
> valores_sustitucion(valor_ingresado varchar[]) ...
> select case $1[1] when 'Funcion_1' then 'UNO'
> when 'Funcion_2' then 'DOS'
> else $1[1] || ',SALIOPORELSE'
> end;
>
> Entonces, aqui es donde uso regexp_replace:
> SELECT regexp_replace(formato,
> E'{([^.]*)\.([a-zA-Z0-9]*)}',
> valores_sustitucion(ARRAY[E'\\1',E'\\2']), 'g')
> from tabla where id=1;
>
> Aqui capturo en el primer grupo lo que esta antes del punto,
> el resto en el segundo grupo, y se los paso como argumentos a
> valores_sustitucion...
> Pero no hace lo que quiero, pues..
> <TR><TD>Funcion_1,SALIOPORELSE</TD></TR></TBODY></TABLE><TABLE
><TBODY><TR><TD>Funcion_2,SALIOPORELSE[snip]
>
> O sea, el case no captura Funcion_1, ni Funcion_2, y sale por
> el ELSE...
> No logro comprender donde esta mi error.
> Consejos, opiniones, seran bienvenidas!
>
Diabólico! Hubiera jurado que el problema estaba en comparar elementos de un
array de varchars con text, pero no. Pasé todo a text, forcé casts por todos
lados sin efecto y el problema persiste.
En cambio la llamada SELECT valores_sustitucion(ARRAY['Funcion_1', 'valor'])
funciona correctamente.
Me lleva a pensar que el \n del regexp_replace no está funcionando como
esperábamos.
¿Habrás encontrado un bug? Creo que merece ser consultado en la lista
pgsql-sql(at)postgresql(dot)org(dot)
Saludos,
Fernando.
From | Date | Subject | |
---|---|---|---|
Next Message | Ing. Marcos Ortiz Valmaseda | 2010-01-12 15:41:27 | Re: Vistas materializadas |
Previous Message | Jose Ayala | 2010-01-12 15:34:12 | Re: Vistas materializadas |