consulta sobre uso like en procedimientos almacenados

Lists: pgsql-es-ayuda
From: "Cesar Erices" <caerices(at)gmail(dot)com>
To: "foro postgresql" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: consulta sobre uso like en procedimientos almacenados
Date: 2008-02-26 14:02:11
Message-ID: 1cb5d9840802260602x4856ececp88a3d83a49569b7a@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Estimados necesito hacer una busqueda con la sentencia like o ilike en un
procedimiento almacenado

CREATE OR REPLACE FUNCTION "public"."Bancos_TraerBancoPorDescripcion"
("pg_catalog"."refcursor", var_descripcion varchar, criterio_busqueda
varchar) RETURNS "pg_catalog"."refcursor" AS

$body$

DECLARE

cursor_salida ALIAS FOR $1;

BEGIN

/* funciona !*/

IF criterio_busqueda = 'igual' THEN

Open cursor_salida For SELECT * FROM bancos WHERE
descripcion = var_descripcion;

RETURN cursor_salida;

END IF;

/* funciona !*/

IF criterio_busqueda = 'cualquier_parte' THEN

Open cursor_salida For SELECT * FROM bancos WHERE
lower(descripcion) ~ var_descripcion;

RETURN cursor_salida;

END IF;

/* NO Funciona !*/

IF criterio_busqueda = 'al_comienzo' THEN

Open cursor_salida For SELECT * FROM bancos WHERE
lower(descripcion) ~ "%" || $2;

RETURN cursor_salida;

END IF;

/*

IF criterio_busqueda = 'al_final' THEN

END IF;

*/

END;

$body$

LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

pero la busqueda por la coincidencia ya sea al inicio o alfinal de la
variable a buscar se cae indicando que

Funciona:

SELECT
"Bancos_TraerBancoPorDescripcion"('cursor_salida','bal','cualquier_parte');
fetch all in cursor_salida

NO Funciona:

SELECT
"Bancos_TraerBancoPorDescripcion"('cursor_salida','bal','al_comienzo');
fetch all in cursor_salida

Error;

*Warning*: pg_query()
[function.pg-query<http://localhost/vall_contabilidad/function.pg-query>]:
Query failed: ERROR: no existe la columna «%» LINE 1: SELECT * FROM bancos
WHERE lower(descripcion) ~ "%" || $1 ^ QUERY: SELECT * FROM bancos WHERE
lower(descripcion) ~ "%" || $1 CONTEXT: PL/pgSQL function

además me gustaria saber como puedo conocer el numero de campos de una
determinada tabla

desde ya muchas gracias...

--
Cesar Erices Vergara
Ingeniero en Gestión Informática
Analista de Sistema


From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Cesar Erices <caerices(at)gmail(dot)com>
Cc: foro postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: consulta sobre uso like en procedimientos almacenados
Date: 2008-02-26 14:15:16
Message-ID: 20080226141516.GE5763@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Cesar Erices escribió:

> Error;
>
> *Warning*: pg_query()
> [function.pg-query<http://localhost/vall_contabilidad/function.pg-query>]:
> Query failed: ERROR: no existe la columna «%» LINE 1: SELECT * FROM bancos
> WHERE lower(descripcion) ~ "%" || $1 ^ QUERY: SELECT * FROM bancos WHERE
> lower(descripcion) ~ "%" || $1 CONTEXT: PL/pgSQL function

Usa comillas simples, no dobles. O sea '%' en vez de "%"

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.