Re: Hacer ILIKE '%$1%' en función

From: "Jaime Casanova" <systemguards(at)gmail(dot)com>
To: Sebastián Villalba <sebastian(at)fcm(dot)unc(dot)edu(dot)ar>
Cc: "Lista Ayuda Pgsql" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Hacer ILIKE '%$1%' en función
Date: 2006-03-26 06:47:09
Message-ID: c2d9e70e0603252247m34b2da87re05c972986ce0587@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On 3/24/06, Sebastián Villalba <sebastian(at)fcm(dot)unc(dot)edu(dot)ar> wrote:
> Hola a todos. Perdón si ya se respondió ésto, pero busqué y no encontré la
> solución.
>
> En una función recibo como parámetro un "varchar" que puede ser un una porción
> de un apellido o un nombre que quiero identificar. La función es la siguiente:
>
> CREATE OR REPLACE FUNCTION "selectDocenteBuscado"(varchar) RETURNS SETOF
> persona AS $$
> SELECT p.*
> FROM persona p, "personaGrupo" pg, grupo g
> WHERE g.nombre = 'Docentes'
> AND g.id = pg.grupo_id
> AND pg.persona_id = p.id
> AND (p.apellido ILIKE '%$1%' OR p.nombre ILIKE '%$1%')
> ORDER BY p.apellido
> $$ LANGUAGE sql IMMUTABLE SECURITY DEFINER;
>
> El problema es que nunca encuentra resultado (dá todos los campos de "persona"
> y después dice "(0 rows)". La consulta está bien hecha, porque escribiéndola
> en una consola sql con la cadena si me trae los resultados esperados, pero
> mandándole esa cadena por parámetro a la función, no me devuelve nada. ¿Qué
> podrá ser?, ¿puede ser que tenga que escapar de alguna forma el $1?. Intenté
> con "%\$1%" y si bien no me dá error, tampoco funciona. :(
>
> Saludos a todos y buen fin de semana.

Esto deberia funcionarte, lo probe en una funcion mas pequeña y simple
pero la idea es la misma:

CREATE OR REPLACE FUNCTION "selectDocenteBuscado"(varchar)
RETURNS SETOF persona AS
$$
SELECT p.* FROM persona p, "personaGrupo" pg, grupo g
WHERE g.nombre = 'Docentes'
AND g.id = pg.grupo_id
AND pg.persona_id = p.id
AND (p.apellido ILIKE '%' || $1 || '%' OR p.nombre ILIKE '%' || $1|| '%')
ORDER BY p.apellido
$$ LANGUAGE sql IMMUTABLE SECURITY DEFINER;

--
Atentamente,
Jaime Casanova

"What they (MySQL) lose in usability, they gain back in benchmarks, and that's
all that matters: getting the wrong answer really fast."
Randal L. Schwartz

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Sebastián Villalba 2006-03-26 11:45:38 Re: Hacer ILIKE '%$1%' en función
Previous Message Martin Marques 2006-03-25 23:16:25 Re: USO de BETWEEN !