Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/10/2009, 13:27
HiperYoss
 
Fecha de Ingreso: octubre-2009
Mensajes: 2
Antigüedad: 14 años, 6 meses
Puntos: 0
Problema devolviendo un refcursor

Soy nuevo aqui en estos foros y les pido ayuda porque ya no se que hacer.

Mi problema es el siguiente: quiero devolver datos de varias tablas pero la función debe recibir 2 parámetros por los cuales debe filtrar los resultados de la consulta, el problema es que lo estoy haciendo con refcursors, entonces probando yo para buscar soluciones cuando la función no recibe parámetros el refcursor me devuelve la consulta con todos los datos y lo puedo obtener en el Visual Studio todo ok, pero cuando le agrego los parámetros aunque no los use en la función, es decir, por el simple hecho de agregar parámetros el refcursor me devuelve <unnamed portal 1>.

El codigo de la funcion con el parametro es:

CREATE OR REPLACE FUNCTION "public"."probando" (pnombre varchar) RETURNS "pg_catalog"."refcursor" AS
$body$
DECLARE
miCursor refcursor;
BEGIN
OPEN miCursor FOR
SELECT
public.nrol.nomb_rol,
public.ntipo_persona.tipo_persona,
public.dpersona.nombres,
public.dpersona.apellido1,
public.dpersona.apellido2,
public.dpersona.ci,
public.dpersona.correo,
public.dpersona.usuario,
public.dpersona.contrasenna,
public.dpersona.id_persona
FROM
public.dpers_rol_privil
INNER JOIN public.ntipo_persona ON (public.dpers_rol_privil.id_tipo_persona = public.ntipo_persona.id_tipo_persona)
INNER JOIN public.nrol ON (public.dpers_rol_privil.id_rol = public.nrol.id_rol)
INNER JOIN public.dpersona ON (public.dpers_rol_privil.id_persona = public.dpersona.id_persona)
WHERE public.dpersona.nombres like '$1%';
RETURN miCursor;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;


y este es el codigo de Visual Studio, estoy probandolo con una console application:

Console.Write("Nombre: ");
string varNombre = Console.ReadLine();
DBManager pgConection = new DBManager();
pgConection.OpenConection();
NpgsqlCommand command = pgConection.ConfigureCommand("probando", pgConection.Postgre, CommandType.StoredProcedure);
command.Parameters.Add(pgConection.ConfigureParame ter(DbType.String, varNombre));
NpgsqlTransaction trans = pgConection.Postgre.BeginTransaction();
NpgsqlDataReader dr = command.ExecuteReader();
trans.Commit();
while (dr.Read())
for (int k = 0; k < dr.FieldCount; k++)
Console.WriteLine(dr.GetValue(k));
Console.ReadKey();

cuando le quito el parametro a la funcion y la llamo me devuelve los datos aca en la consola normalmente, pero cuando le agrego el parametro incluso aunque no lo use en la funcion solo muestra: <unnamed portal 1>

Nota: DBManager es una clase que yo hice para manejar la BD al igual que el metodo ConfigureParameter();

Saludos, Y.