vPL/SQL retornar una tabla de un funcion
Publicado por Roberto (1 intervención) el 13/12/2010 14:16:34
Hola tengo el siguiente paquete que me retorna una tabla, pero no se como puedo coger esta tabla cuando llamo a la función. Retorno una tabla porque necesito retornar varios valores y no se me ocurre otra forma de almacenarlos, el caso esque la tabla se puede retornar pero no tengo ni idea de como recogerla. Gracias. Un saludo.
CREATE OR REPLACE PACKAGE Paquete_Tiempo_corredores AS
TYPE tipoTiemposMedios IS RECORD(
codcorredor Clasificacion_etapa.cod_corredor%TYPE,
tiempo_medio Clasificacion_etapa.tiempo%TYPE);
TYPE tabla_TiemposMedios IS TABLE OF tipoTiemposMedios
INDEX BY BINARY_INTEGER;
FUNCTION Tiempo_medio_corredor(
Parametro1 Participantes.cod_equipo%TYPE,
Parametro2 Participantes.temporada%TYPE)
RETURN tabla_TiemposMedios;
END Paquete_Tiempo_corredores;
/
CREATE OR REPLACE PACKAGE BODY Paquete_Tiempo_corredores
AS
FUNCTION Tiempo_medio_corredor(
Parametro1 Participantes.cod_equipo%TYPE,
Parametro2 Participantes.temporada%TYPE)
RETURN tabla_TiemposMedios IS
CURSOR C_CorredoresEquipo IS
SELECT cod_corredor
FROM Participantes
WHERE (cod_equipo=Parametro1)AND(temporada=Parametro2);
v_TiemposMedios tipoTiemposMedios;
v_tabla_TiemposMedios tabla_TiemposMedios;
tiempo_parcial Clasificacion_etapa.tiempo%TYPE;
n_etapas Clasificacion_etapa.numero_etapa%TYPE;
k INTEGER:=1;
BEGIN
SELECT MAX(numero_etapa) INTO n_etapas
FROM Clasificacion_etapa
WHERE temporada=Parametro2;
FOR v_participantes IN C_CorredoresEquipo LOOP
tiempo_parcial:=Tiempo_total_corredor(v_participan tes.cod_corredor, Parametro2);
v_TiemposMedios.tiempo_medio:=tiempo_parcial/n_etapas;
v_TiemposMedios.codcorredor:=v_participantes.cod_c orredor;
v_tabla_TiemposMedios(k):=v_TiemposMedios;
k:=k+1;
END LOOP;
RETURN v_tabla_TiemposMedios;
END Tiempo_medio_corredor;
END Paquete_Tiempo_corredores;
/
CREATE OR REPLACE PACKAGE Paquete_Tiempo_corredores AS
TYPE tipoTiemposMedios IS RECORD(
codcorredor Clasificacion_etapa.cod_corredor%TYPE,
tiempo_medio Clasificacion_etapa.tiempo%TYPE);
TYPE tabla_TiemposMedios IS TABLE OF tipoTiemposMedios
INDEX BY BINARY_INTEGER;
FUNCTION Tiempo_medio_corredor(
Parametro1 Participantes.cod_equipo%TYPE,
Parametro2 Participantes.temporada%TYPE)
RETURN tabla_TiemposMedios;
END Paquete_Tiempo_corredores;
/
CREATE OR REPLACE PACKAGE BODY Paquete_Tiempo_corredores
AS
FUNCTION Tiempo_medio_corredor(
Parametro1 Participantes.cod_equipo%TYPE,
Parametro2 Participantes.temporada%TYPE)
RETURN tabla_TiemposMedios IS
CURSOR C_CorredoresEquipo IS
SELECT cod_corredor
FROM Participantes
WHERE (cod_equipo=Parametro1)AND(temporada=Parametro2);
v_TiemposMedios tipoTiemposMedios;
v_tabla_TiemposMedios tabla_TiemposMedios;
tiempo_parcial Clasificacion_etapa.tiempo%TYPE;
n_etapas Clasificacion_etapa.numero_etapa%TYPE;
k INTEGER:=1;
BEGIN
SELECT MAX(numero_etapa) INTO n_etapas
FROM Clasificacion_etapa
WHERE temporada=Parametro2;
FOR v_participantes IN C_CorredoresEquipo LOOP
tiempo_parcial:=Tiempo_total_corredor(v_participan tes.cod_corredor, Parametro2);
v_TiemposMedios.tiempo_medio:=tiempo_parcial/n_etapas;
v_TiemposMedios.codcorredor:=v_participantes.cod_c orredor;
v_tabla_TiemposMedios(k):=v_TiemposMedios;
k:=k+1;
END LOOP;
RETURN v_tabla_TiemposMedios;
END Tiempo_medio_corredor;
END Paquete_Tiempo_corredores;
/
Valora esta pregunta


0