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
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 ! |