Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Pronlema con funcion a la hora de devolver datos.

Estas en el tema de Pronlema con funcion a la hora de devolver datos. en el foro de Oracle en Foros del Web. Buenas compañeros. Tengo una funcion en la que quiero calcular el Indice Medio de Masa Corporal de todos los jugadores de una base de datos. ...
  #1 (permalink)  
Antiguo 30/01/2014, 09:51
 
Fecha de Ingreso: diciembre-2013
Ubicación: Zaragoza
Mensajes: 7
Antigüedad: 10 años, 3 meses
Puntos: 0
Pronlema con funcion a la hora de devolver datos.

Buenas compañeros.

Tengo una funcion en la que quiero calcular el Indice Medio de Masa Corporal de todos los jugadores de una base de datos.

Para ello en un ejercicio previo he calculado el ICM de un jugador(pasandolo como parametro) llamando a unas funciones previas para que lo haga.

Ahora tengo el problema de que al usar un cursor, no se como devolver los datos, ya que no se que colocar en el return.

Os paso los codigos:

Código:
CREATE OR REPLACE FUNCTION MediaICM2
RETURN NUMBER
IS
   
    CURSOR icmjugadores IS
    SELECT peso,altura  from jugadores;
BEGIN
  FOR registros_icm in icmjugadores
  LOOP
    DBMS_OUTPUT.PUT_LINE(PesoKilos(registros_icm.peso));
    DBMS_OUTPUT.PUT_LINE(AlturaMetros2(registros_icm.altura));
    DBMS_OUTPUT.PUT_LINE(CalcularIMC2(PesoKilos(registros_icm.peso),AlturaMetros2(registros_icm.altura)));
    
  END LOOP;


RETURN nosequeponer;
END MediaICM2;

Código:
-- FUNCION PASAR ALTURA DE PIES A METROS--
	create or replace FUNCTION AlturaMetros2
	(v_altura jugadores.altura%TYPE)
	RETURN NUMBER
	IS
	  v_altura2 number;
	  v_altura3 number;
	  v_pies_metros number;
	  v_pulgadas_centimetros number;
	  v_metros number(5,2);
	BEGIN
	  v_altura2:=substr(v_altura, 1, 1);
	  v_altura3:=substr(v_altura, 3);
	  v_pies_metros:=v_altura2*0.3048;
	  v_pulgadas_centimetros:=v_altura3*0.0254;
	  v_metros:=v_pies_metros+v_pulgadas_centimetros;
	RETURN v_metros;  
	END AlturaMetros2;
Código:
 --FUNCION CALCULAR ICM--
	CREATE OR REPLACE FUNCTION CalcularIMC2
	(v_peso NUMBER,v_altura NUMBER)
	RETURN NUMBER
	IS
	TOTAL NUMBER(5,2);
	BEGIN
	TOTAL:=(v_peso/(v_altura*v_altura));
	RETURN TOTAL;  
	END CalcularIMC2;
Segun lo que he hecho, deberia calcular el ICM de todos los jugadores de la tabla, pero no se como devolver los datos para comprobarlo, aunque el paso final es calcular la media de ICM, cosa que tampoco se hacer, al usar llamada a funcion.

Si no habia pensado en que esta funcion haga todos pasos, ya que entonces podria meter el valor de ICM en una variable acumuladora y luego calcular la media, o hacerlo mediante un array.

Perdon si no me explico bien, llevo un lio en la cabeza ahora como para saber si lo expreso bien.

Un saludo
  #2 (permalink)  
Antiguo 30/01/2014, 10:03
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Pronlema con funcion a la hora de devolver datos.

Averigua sobre parametros de salida en una función.

Algo como:
Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION algo (param1 IN NUMBER,param2 OUT NUMBER,param3 INOUT NUMBER)


De esta forma los puedes retornar
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 30/01/2014, 12:20
 
Fecha de Ingreso: diciembre-2013
Ubicación: Zaragoza
Mensajes: 7
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Pronlema con funcion a la hora de devolver datos.

Pero haber parametro de entrada tengo que llamar a la funcion pasandole algo, la cosa es que no tengo que pasarle nada, solo ejecutarla, y que me devuelva un numero, que seria un parametro out, pero como meto la salida de calcularicm2 en un parametro? segun lo que tengo ahora mismo?
  #4 (permalink)  
Antiguo 30/01/2014, 12:30
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Pronlema con funcion a la hora de devolver datos.

Debes tener en cuenta que una función retorna un unico valor.

En tu primera función MediaICM2 que es lo que quieres devolver y a donde?

En pocas palabras, estas recorriendo N jugadores. Quieres devolver N valores de cada jugador?

Si es asi, tendrías que hacer uso de arreglos de datos o tablas PL.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 30/01/2014, 13:01
 
Fecha de Ingreso: diciembre-2013
Ubicación: Zaragoza
Mensajes: 7
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Pronlema con funcion a la hora de devolver datos.

Lo que quiero devolver es un unico valor a un bloque anonimo, que es la media de los valores de ICM, lo que tengo hecho ahora es que calcule todos los valores, pero ahora no se como sacar la media.

El bloque anonimo sería algo como:

Código:
BEGIN
  DBMS_OUTPUT.PUT_LINE(MediaICM2);
END;
Pero tengo la duda de si con lo que tengo ahora se podria hacer, ya que uso otras funciones.

Etiquetas: devolver, funcion, registro, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:51.