From: | Nahum Castro <nahumcastro(at)gmail(dot)com> |
---|---|
To: | Francisco Olarte <folarte(at)peoplecall(dot)com> |
Cc: | pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Infierno de las comillas dobles en plpgsql |
Date: | 2022-01-28 15:44:33 |
Message-ID: | CABqArLgEjODoEHYODiCGsjNTkHw+MaJC8BWE8YJkreqwOj1ABg@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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 (folarte(at)peoplecall(dot)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 <nahumcastro(at)gmail(dot)com> wrote:
> > Saludos a tod(at)s(dot)
> > 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
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2022-01-28 16:15:59 | Re: Infierno de las comillas dobles en plpgsql |
Previous Message | Francisco Olarte | 2022-01-28 08:40:19 | Re: Infierno de las comillas dobles en plpgsql |