Nahum: Primero, supongo que tu infierno de las comillas dobles se refiere al de las comillas (simples) dobladas. Ojo que las comillas dobles son las que se usan para identificadores ( " = 034 vs '' = 039 039, con este font son casi iguales).
On Fri, 28 Jan 2022 at 07:50, Nahum Castro <nahumcas...@gmail.com> wrote: > Saludos a tod@s. > Me encontré con un problema en plpgsql > Cuando necesito agregar a una variable campos con valores que tienen comillas > simples, la función concatenar no funciona. > variable := 'update tabla tbl set url = > concat('http://server.com/algo.php?clave=',''',tbl.clave,''')' > trate de escapar con los dolares pero no me funciono ni con los ' dobles .... Tu problema parece el tipico del quote del quote del quote... que es un follon pero se suele resolver razonablemente usando distinatas comillas, de las que en sql hay infinitas usando $x$. Ahora no tengo acceso ha nada para probarlo pero yo probaria algo asi. 1.- Queremos generar un concat que usa comillas simples, usemos $c$ como delimitador en el para evitar problemas ( pongo lo que voy haciendo entre <<<>>> para verlo. <<<concat($c$http://server.com/algo.php?clave=$c$,$c$'$c$,tbl.clave,$c$'$c$')>>> Fijate que por si acaso pongo hasta el http.. con $c$ aunque no le hace falta. 2.- Generemos una constante con un update con la estructura anterior, usemos $UPD$ para eso. <<<$UPD$update tabla tbl set url = concat($c$http://server.com/algo.php?clave=$c$,$c$'$c$,tbl.clave,$c$'$c$')$UPD$>>> 3.- Hagamos una funcion que usa esa constante, usemos $funcion$ para ella: <<<$funcion$ BEGIN .... variable: = $UPD$update tabla tbl set url = concat($c$http://server.com/algo.php?clave=$c$,$c$'$c$,tbl.clave,$c$'$c$')$UPD$ .... END $funcion$>>> Como te digo no tengo acceso a un server ahora, pero ese tipo de cosa es lo que uso habitualmente para estos problemas en lenguajes que disponen de ese tipo de "comillas gordas" ( $xx$, que hay construcciones similares en varios lenguages ). Ir por capas y cambiar la comilla a usar en cada nivel. Cuando lo genero automaticamente normalmente uso escapes ( \ ), pero el generador automatico no tiene problemas de ir comprobando y siempre mete el numero correcto de ellos, las comillas gordas se inventaron para resolver este tipo de problemas. No colisionan y cada paso de interpretacion va pelando una capa de forma predecible., Por cierto, fijate que no es que la funcion de concatenar falle, sino que parece que no estas consiguiendo generar la llamada adecuadamente, en estos casos es mejor que pongas un trozo mas autocontenido, tipo "estoy haciendo una funcion CREATE FUNCTION ..... variable:=........." y no consigo que vaya, incluso si puedes que hagas un sample de una linea para probar/discutir sobre el. ( como reducirla a un variable:=..., RAISE NOTICE '<<<%>>>0, variable ). Francisco Olarte.