Muchas Gracias Francisco. Lo voy a probar hoy y te comento, gracias mil.
Nahum El vie, 28 ene 2022 a la(s) 02:40, Francisco Olarte (fola...@peoplecall.com) escribió: > 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. > -- *Nahum Castro González* Blvd. Perdigón 214, Brisas del Lago. CP 37207 León, Guanajuato, México