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

Reply via email to