Oracle - duda con valor que devuelve una funcion

   
Vista:

duda con valor que devuelve una funcion

Publicado por Lore (9 intervenciones) el 06/10/2009 10:05:24
Hola.

Tengo una duda con respecto a las funciones PL/SQL.

He visto una en la que durante el código tiene varios 'return', según las condiciones que se cumplan, pero al final, antes del "end" de la función, tiene otro "return". ¿Siempre se devlverá este último valor o cuando aparece un "return" durante en código se termina de ejecutar la función?

Pongo el ejemplo para que entendais mejor.

Gracias.

IF p_fecha IS NOT NULL THEN
v_dias_antigua := extract(DAY FROM p_fecha);
IF v_dias_antigua = 5 or v_dias_antigua = 20 THEN
return TRUE;
ELSIF v_dias_antigua > 5 AND v_dias_antigua < 20 THEN
v_fecha_nueva := (p_fecha - v_dias_antigua) + 5;
IF ffecobls(v_codterri, 0, v_fecha_nueva) = p_fecha THEN
return TRUE;
END IF;
ELSE
v_fecha_nueva := (p_fecha - v_dias_antigua) + 20;
IF ffecobls(v_codterri, 0, v_fecha_nueva) = p_fecha THEN
return TRUE;
END IF;
END IF;
END IF;
return FALSE;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:duda con valor que devuelve una funcion

Publicado por fran (8 intervenciones) el 06/10/2009 19:02:31
por lo que puedo apreciar el ultimo retun FALSE esta fuera de tus sentencias de condiciones, por ello talvez siempre te retorme false.
El valor que retorne sera el que se cumpla en la condición

si se cumple la primera retorna el valor asignado en este caso para este caso es que luego de tus condiciones siempre retornas FALSE

la sentencia quedaría así

IF p_fecha IS NOT NULL THEN
v_dias_antigua := extract(DAY FROM p_fecha);
IF v_dias_antigua = 5 or v_dias_antigua = 20 THEN
return TRUE;
********** si cumple retorna TRUE
ELSIF v_dias_antigua > 5 AND v_dias_antigua < 20 THEN
v_fecha_nueva := (p_fecha - v_dias_antigua) + 5;
IF ffecobls(v_codterri, 0, v_fecha_nueva) = p_fecha THEN
return TRUE;
********** si cumple retorna TRUE
END IF;
ELSIF
v_fecha_nueva := (p_fecha - v_dias_antigua) + 20;
IF ffecobls(v_codterri, 0, v_fecha_nueva) = p_fecha THEN
return TRUE;
********** si cumple retorna TRUE
END IF;
END IF;
ELSIF
return FALSE;
********** si no se cumple nuinguna retorna FALSE
END IF;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:duda con valor que devuelve una funcion

Publicado por Lore (9 intervenciones) el 07/10/2009 08:26:32
Claro, a eso iba yo, que con el ultimo return fuera de todas las condiciones se cumpla lo q se cumple siempre va a devolver FALSE. Mi pregunta era si la función para su ejecución cuando encuentra un return, que esntonces si podría tener su lógica ese código.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:duda con valor que devuelve una funcion

Publicado por Leonardo (44 intervenciones) el 09/10/2009 19:26:59
Buenas Tardes Lore. Mira, te comento que cuando una función encuentra la instrucción return automáticamente sale de la función regresando el valor que se está especificando. Si existe código debajo de esta instrucción ya no se ejecuta...

en el caso de la función, si te pones a observar un poco, los returns "internos" son todos casos de éxito (return TRUE); mientras que el último de los Returns es un fracaso (return FALSE). Cuando llega a cualquiera de las sentencias return TRUE ahí termina la ejecución de la función. si cualquiera de las condiciones falla pues regresa un FALSE.

En mi caso tampoco me gusta la opción de tener varios returns en una misma función, y prefiero crear una variable y asignarle un valor correspondiente y al final entonces sí hacer el return algo como esto:

regresar := FALSE;
IF p_fecha IS NOT NULL THEN
v_dias_antigua := extract(DAY FROM p_fecha);
IF v_dias_antigua = 5 or v_dias_antigua = 20 THEN
regresar := TRUE;
ELSIF v_dias_antigua > 5 AND v_dias_antigua < 20 THEN
v_fecha_nueva := (p_fecha - v_dias_antigua) + 5;
IF ffecobls(v_codterri, 0, v_fecha_nueva) = p_fecha THEN
regresar := TRUE;
END IF;
ELSE
v_fecha_nueva := (p_fecha - v_dias_antigua) + 20;
IF ffecobls(v_codterri, 0, v_fecha_nueva) = p_fecha THEN
regresar:= TRUE;
END IF;
END IF;
END IF;
return regresar;

Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:duda con valor que devuelve una funcion

Publicado por Lore (9 intervenciones) el 13/10/2009 08:21:43
Gracias Leo, esa era la duda que tenia.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar