PostgreSQL - Funciones en PostgreSQL

 
Vista:
Imágen de perfil de Yuri
Val: 5
Ha disminuido su posición en 2 puestos en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Funciones en PostgreSQL

Publicado por Yuri (3 intervenciones) el 10/08/2018 16:14:32
Buenos días necesito de vuestra ayuda, he creado un procedimiento almacenado con la finalidad de recuperar
datos de diferentes tablas mediante los inner join, para poder mostrarlos en un reporte en c# usando crystal report,
el código del procedimiento es el siguiente:

CREATE OR REPLACE FUNCTION public.reporte(_codpropiedad integer,_fecha date)RETURNS SETOF record AS $BODY$
begin
select pagos.codpago, propiedad.urbanizacion, propiedad.calle, propiedad.numero, propiedad.tipomaterial,
localidad.localidad, localidad.tipolocalidad, propietario.dni, propietario.ape_nombres, costo.monto
from pagos inner join propiedad on pagos.codpropiedad = propiedad.codpropiedad
inner join propietatiopropiedad on propiedad.codpropiedad = propietatiopropiedad.codpropiedad
inner join propietario on propietatiopropiedad.dni = propietario.dni
inner join localidad on propiedad.codlocalidad = localidad.codlocalidad
inner join costo on costo.idcosto = pagos.idcosto
where pagos.codpropiedad = _codpropiedad and fecha = _fecha;
end;
$$ language plpgsql;

se que el error esta en la linea RETURNS SETOF record AS por que esto solo se utiliza para recuperar datos de una sola tabla, pero no se que comando debo de colocar ahi por favor, de antemano gracias por vuestra ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 15
Ha mantenido su posición en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Funciones en PostgreSQL

Publicado por Hugo (8 intervenciones) el 10/08/2018 23:09:28
Respuesta
Puedes utilizar esta otra forma para resolver tu problema, te dejo un ejemplo sencillo, simplemente lo adaptarías a tu caso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Yuri
Val: 5
Ha disminuido su posición en 2 puestos en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Funciones en PostgreSQL

Publicado por Yuri (3 intervenciones) el 11/08/2018 00:03:57
Gracias por la respuesta Hugo, implemente el procedimiento tal como me los sugeriste pero al ejecutar la función, me genera el siguiente error:

ERROR: la consulta no tiene un destino para los datos de resultado
HINT: Si quiere descartar los resultados de un SELECT, utilice PERFORM.
CONTEXT: función PL/pgSQL reporte(integer,date) en la línea 4 en sentencia SQL
SQL state: 42601

y el procedimiento almacenado lo implemente de la sgt manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
CREATE OR REPLACE FUNCTION public.reporte(
	_codpropiedad integer,
	_fecha date)
    RETURNS TABLE(codpago integer, urbanizacion character varying, calle character varying, numero character varying, tipomaterial character varying, localidad character varying, tipolocalidad character varying, dni character varying, ape_nombres character varying, monto numeric)
    LANGUAGE 'plpgsql'
 
    COST 100
    VOLATILE
    ROWS 1000
AS $BODY$
 
begin
	select pagos.codpago, propiedad.urbanizacion, propiedad.calle, propiedad.numero, propiedad.tipomaterial,
	localidad.localidad, localidad.tipolocalidad, propietario.dni, propietario.ape_nombres, costo.monto
	from pagos inner join propiedad on pagos.codpropiedad = propiedad.codpropiedad
	inner join propietatiopropiedad on propiedad.codpropiedad = propietatiopropiedad.codpropiedad
	inner join propietario on propietatiopropiedad.dni = propietario.dni
	inner join localidad on propiedad.codlocalidad = localidad.codlocalidad
	inner join costo on costo.idcosto = pagos.idcosto
	where pagos.codpropiedad = _codpropiedad and fecha = _fecha;
end;
 
$BODY$;
 
ALTER FUNCTION public.reporte(integer, date)
    OWNER TO postgres;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Funciones en PostgreSQL

Publicado por martin (121 intervenciones) el 11/08/2018 01:14:16
Te falto el RETURN QUERY tal como esta en el ejemplo de HUgo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Yuri
Val: 5
Ha disminuido su posición en 2 puestos en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Funciones en PostgreSQL

Publicado por Yuri (3 intervenciones) el 11/08/2018 01:22:23
Genial, muchas gracias Hugo por el código y a ti Martin por haberme hecho notar mi error, esta funcionando al 100%
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar