Costos

Solo disponible en BuenasTareas
  • Páginas : 2 (312 palabras )
  • Descarga(s) : 0
  • Publicado : 30 de agosto de 2012
Leer documento completo
Vista previa del texto
Recursividad en PL/SQL
Un programa recursivo es aquel que se llama a sí mismo. Hay que
pensar en las llamadas recursivas como llamadas a otros programas que
realizan la misma tareas, pero enejecuciones diferentes, y con
parámetros distintos. Cada llamada recursiva crea tantas nuevas
instancias de elementos, como elementos haya declarados en el
programa.
Hay que tener cuidado en dondeponemos las llamadas recursivas,
puesto que si las ponemos en un bucle FOR, o entre sentencias OPEN y
CLOSE, se abre un nuevo cursor para cada llamada, con la consiguiente
degradación del sistema.
Hayque especificar siempre y de manera directa cual es la condición
de salida de un programa recursivo, puesto que si no se hace generará
un bucle infinito que acabará con una extinción de la memoriadisponible, y por consiguiente se disparará la excepción
STORAGE_ERROR.
Veamos un ejemplo sencillo de recursividad implementada en
PL/SQL; resolveremos el problema por excelencia asociado a larecursividad, es decir, la obtención del factorial de un número.
FUNCTION fac (n POSITIVE) RETURN INTEGER IS
BEGIN
IF n=1 THEN -- Condición de salida…
RETURN 1;
ELSE
RETURN n*fac(N-1); -- Llamadarecursiva…
END IF;
END fac;

select numero from numeros
create or replace function factor
(
numero number
)
is
n number (50);
FUNCTION fac (n POSITIVE) RETURN INTEGER IS
begin
selectnumero into n
from numeros
IF n=1 THEN
RETURN 1
ELSE
RETURN n*fac(N-1)
END IF

end factor;

select * from empleados;

create or replace function nombreempleado
(
id number
)
returnvarchar2
is
ret varchar2 (50);
begin
select nombre || ' '|| apellido into ret
from empleados
where empleo=sistemas;
return ret;
end nombreempleado;

select * from empleados;

create orreplace function "FACTOR"
(
n in VARCHAR2

)
return NUMBER
is
begin
BEGIN
IF n=1 THEN -- Condición de salida…
RETURN 1;
ELSE
RETURN n*fac(N-1); -- Llamada recursiva…
END IF;
END factor;...
tracking img