> -----Mensaje original----- > De: [email protected] > > 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 [email protected]. Saludos, Fernando. -- TIP 1: para suscribirte y desuscribirte, visita http://archives.postgresql.org/pgsql-es-ayuda
