Ver Mensaje Individual
  #2 (permalink)  
Antiguo 24/03/2010, 12:28
Avatar de 8vio
8vio
 
Fecha de Ingreso: marzo-2008
Ubicación: Detras del monitor
Mensajes: 168
Antigüedad: 12 años, 7 meses
Puntos: 6
Respuesta: ayuda URGENTE!!!! POR FA

Hola como estas,

Para comenzar esto esta malo.
MED IN OUT MEDICOS.NOMBRE%TYPE
Tienes dos parametros de entrada? El de salida es nada mas el del return. Ahora ese IN OUT te da un error y OUT solo igual.

Seguimos:

Código:
CREATE OR REPLACE FUNCTION DA_MEDICO(CODP IN VISITAS.P#%TYPE)
RETURN VARCHAR
IS

MED MEDICOS.NOMBRE%TYPE;

BEGIN


SELECT NOMBRE 
INTO MED 
FROM MEDICOS 
WHERE M# IN(SELECT max(M#) FROM VISITAS WHERE P#=CODP);

RETURN MED;

EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN('NO HAY PACIENTE');
WHEN OTHERS THEN
RETURN('NO HAY PACIENTE');
END;

Esto estaria correcto, pero creo que la logica del problema no, xq dices que si no tiene visitas no hay medico, y si no existe no hay paciente. Tal vez hace falta una tabla pacientes, Xq siempre que no tenga visitas te va a ir al no datafound, es decir que si no tienes visitas es como si no existiera. Si tuvieras una tabla pacientes podrias verficar asi:

Existe en empleado + no tiene visitas = no hay medico
No existe en empleado = no hay paciente
Se cumplen las dos = se retorna el medico

Falta arquitectura para que te devuelva todo tal cual la logica del negocio y estoy casi seguro que te comiste en la explicacion o en la funcion esa tabla paciente.


Quedaria asi:

Código:
CREATE OR REPLACE FUNCTION DA_MEDICO(CODP IN VISITAS.P#%TYPE)
RETURN VARCHAR
IS

MED MEDICOS.NOMBRE%TYPE;
PACIE NUMBER;

BEGIN

SELECT COUNT(P#) 
INTO PACIE
FROM PACIENTE
WHERE P#=CODP;

IF (PACIE>0) THEN

SELECT NOMBRE 
INTO MED 
FROM MEDICOS 
WHERE M# IN(SELECT max(M#) FROM VISITAS WHERE P#=CODP);

ELSE

MED:= 'NO HAY PACIENTE';

END IF;

RETURN MED;

EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN('NO HAY MEDICO');
WHEN OTHERS THEN
RETURN('NO HAY MEDICO');
END;
De esta ultima forma estaria correcto con logica y todo

Nota: En el select del medico en las visitas coloque un max(), xq me va a traer un monton de medicos y va a explotar ( si tiene varios). El criterio para seleccionar el medico lo puedes cambiar, por ejm si tienes fechas en esa tabla visita agarras el ultimo medico de la ultima visita. Ojo el max no hace eso.

Saludos,

Última edición por 8vio; 24/03/2010 a las 13:08 Razón: Nota