Re: ERROR: wrong record type supplied in RETURN NEXT

From: Julio Cesar Rodriguez Dominguez <jurasec(at)gmail(dot)com>
To: Patricio Cardenas Garay <pcardenas(at)colegiointeractivo(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: ERROR: wrong record type supplied in RETURN NEXT
Date: 2010-12-09 20:29:20
Message-ID: AANLkTim2R2Okf0PrFAd8aTub5qP5LGU-VGdbqmV6k-d7@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2010/12/9 Patricio Cardenas Garay <pcardenas(at)colegiointeractivo(dot)com>:
>
>
>
>
> Buen Hombre me podrías ayudar con esto
>
> Bueno agregué el record en la salida tratando de sacar este otro Error
>
>
>
> Error de SQL:
>
>
>
> ERROR:  wrong record type supplied in RETURN NEXT
>
> CONTEXT:  PL/pgSQL function "anosaprobados" line 33 at RETURN NEXT
>
>
>
>
>
> La consulta es esta
>
> ***************************************
>
> select * from anosaprobados(17938327)
>
>
>
>
>
> La Funcion es
>
> ****************************************
>
> CREATE OR REPLACE FUNCTION anosaprobados (integer)
>
> RETURNS SETOF respuesta_anoscursados AS
>
> $BODY$
>
> DECLARE
>
> RESPUESTA RECORD;
>
> rutingresado ALIAS FOR $1;
>
> BEGIN
>
>
>
>   FOR RESPUESTA IN (
>
>
>
>   SELECT
>
>   inst.rdb as insti,
>
>   pro.id_ano as id_año,
>
>   pro.rut_alumno as rut_alumno,
>
>   inst.nombre_instit as nombreinstitucion,
>
>   anes.nro_ano as numero_año,
>
>   (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 =
> 17980141
>
>   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 = 17980141 and pro.situacion_final = 1 and pro.promedio > 0
> and pro.asistencia > 0
>
>   UNION
>
>   SELECT
>
>   0 as insti,
>
>   0 as id_año,
>
>   conce.rut_alumno ,
>
>   conce.institucion,
>
>   conce.ano,
>
>   (conce.curso || '-' || conce.letra) as cursoletra
>
>   FROM concentracion_notas conce where conce.rut_alumno = 17980141   )
>
>
>
>   LOOP
>
>       RETURN NEXT RESPUESTA;
>
>   END LOOP;
>
>
>
> RETURN;
>
> END;
>
> $BODY$
>
> LANGUAGE plpgsql;
>
>
>
> Con esto
>
>
>
> CREATE TYPE respuesta_anoscursados AS
>
> (rut_alumno integer,rdb integer,nombre_instit char(1000),nro_ano
> integer,id_ano integer,cursoletra varchar(2))

Este problema es similiar al anterior, debes hacer un cast a cada
columna del select, según el tipo de dato respuesta_anoscursados:

SELECT inst.rdb::int as insti, pro.id_ano:int as id_año ...

esto por que no se cual o cuales columnas están mandándose con un tipo
de dato diferente al esperado por el record definido por ti.

Por otra parte no veo necesario el crear esta función, bien podrías
crear una vista.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Julio Cesar Rodriguez Dominguez 2010-12-09 20:34:51 Re: PL/PGSQL: Lanzar comandos del S.O.
Previous Message Patricio Cardenas Garay 2010-12-09 19:41:01 ERROR: wrong record type supplied in RETURN NEXT