RE: Ayuda con funcion retorno de datos ejecutando select

From: "Patricio Cardenas Garay" <pcardenas(at)colegiointeractivo(dot)com>
To: "'Julio Cesar Rodriguez Dominguez'" <jurasec(at)gmail(dot)com>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Ayuda con funcion retorno de datos ejecutando select
Date: 2010-12-07 18:50:13
Message-ID: !&!AAAAAAAAAAAYAAAAAAAAAGSqVoGYTtJLnSkbDghUhpvCgAAAEAAAAKOVsI+KbHlGniwmmnLG+YIBAAAAAA==@colegiointeractivo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Eso era Gracias Master

;D

-----Mensaje original-----
De: Julio Cesar Rodriguez Dominguez [mailto:jurasec(at)gmail(dot)com]
Enviado el: Martes, 07 de Diciembre de 2010 15:36
Para: Patricio Cardenas Garay
CC: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] Ayuda con funcion retorno de datos ejecutando
select

2010/12/7 Patricio Cardenas Garay <pcardenas(at)colegiointeractivo(dot)com>:
>
>
>
>
> Tengo esto
>
>
>
> CREATE OR REPLACE FUNCTION anosaprobados ()
>
> RETURNS SETOF respuesta_anoscursados AS
>
> $BODY$
>
> DECLARE
>
> RESPUESTA RECORD;
>
> BEGIN
>
> FOR RESPUESTA IN (
>
> SELECT pro.rut_alumno,inst.rdb,
>
>   inst.nombre_instit,anes.nro_ano,
>
>   pro.id_ano,(cu.grado_curso || '-' || cu.letra_curso) as cursoletra
>
> FROM promocion pro
>
>   inner join institucion inst on inst.rdb = pro.rdb
>
>   inner join ano_escolar anes on anes.id_ano = pro.id_ano
>
>   inner join matricula ma on ma.id_ano = pro.id_ano and ma.rut_alumno =
> 18018550
>
>   inner join curso cu on cu.id_ano = anes.id_ano and cu.ensenanza > 110
and
> cu.id_curso = ma.id_curso
>
> WHERE
>
>   pro.rut_alumno = 18018550  and pro.situacion_final = 1 and pro.promedio
>
> 0 and pro.asistencia > 0
>
> ORDER BY anes.nro_ano)
>
> LOOP
>
> RETURN NEXT RESPUESTA;
>
> END LOOP;
>
> RETURN;
>
> END;
>
> $BODY$
>
> LANGUAGE plpgsql;
>
>
>
> Con esto
>
>
>
> CREATE TYPE respuesta_anoscursados AS
>
> (rut_alumno int4,rdb int4,nombre_instit text,nro_ano int4,id_ano
> int4,cursoletra text)
>
>
>
>
>
> Me retorna esto
>
>
>
> ERROR:  wrong record type supplied in RETURN NEXT
>
> CONTEXT:  PL/pgSQL function "anosaprobados" line 17 at return next
>
>
>
> Como lo puedo arreglar por favor

El problema está en los tipos de datos que se estan regresando dentro
del record respuesta, para asegurar que estas regresar el tipo de dato
que esta esperando según el tipo de dato que creaste, haz un cast a
todas las columnas del select.

Por otra parte, podrias hacer la declaración de los parametros de
salida en la misma función, para evitar crear un tipo de dato nuevo:

CREATE OR REPLACE FUNCTION anosaprobados ( OUT rut_alumno int4, OUT
rdb int4, OUT nombre_instit text, OUT nro_ano int4, OUT id_ano int4,
OUT cursoletra text ) RETURNS SETOF record AS

$BODY$

DECLARE

RESPUESTA RECORD;

BEGIN

FOR RESPUESTA IN (

SELECT pro.rut_alumno,inst.rdb,

inst.nombre_instit,anes.nro_ano,

pro.id_ano,(cu.grado_curso || '-' || cu.letra_curso) as cursoletra

FROM promocion pro

inner join institucion inst on inst.rdb = pro.rdb

inner join ano_escolar anes on anes.id_ano = pro.id_ano

inner join matricula ma on ma.id_ano = pro.id_ano and ma.rut_alumno =
18018550

inner join curso cu on cu.id_ano = anes.id_ano and cu.ensenanza >
110 and cu.id_curso = ma.id_curso

WHERE

pro.rut_alumno = 18018550 and pro.situacion_final = 1 and
pro.promedio > 0 and pro.asistencia > 0

ORDER BY anes.nro_ano)

LOOP

RETURN NEXT RESPUESTA;

END LOOP;

RETURN;

END;

$BODY$

LANGUAGE plpgsql;

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Edwin Perez Lozano 2010-12-08 11:52:15 Re: Problema instalando Pgpool
Previous Message Julio Cesar Rodriguez Dominguez 2010-12-07 18:36:02 Re: Ayuda con funcion retorno de datos ejecutando select