Oracle - Explicacion Funcion

 
Vista:
sin imagen de perfil

Explicacion Funcion

Publicado por Ivan (1 intervención) el 20/05/2017 19:08:45
Buenas tardes;

Estoy estudiando DAM y en bases de datos estamos con PL/SQL de Oracle. En un ejercicio que debemos realizar no entiendo una función que me han pasado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
CREATE OR REPLACE PROCEDURE MOVER_FAMILIA (FAM_DESTINO NUMBER, FAM_ORIGEN NUMBER)
IS
 
--CURSOR VARIABLE
 
TYPE CURSOR_FAMILIAS IS REF CURSOR RETURN FAMILIAS%TYPE; ---DEFINO REF CURSOR
CUR_FAM CURSOR_FAMILIAS; ---DECLARO VARIABLE DE ESE TIPO CURSOR
FAM CUR_FAM%ROWTYPE; --- VARIABLE QUE RECOGE TODAS LAS COLUMNAS DE CUR_FAM "LISTA VARIABLES"
 
ES_PADRE NUMBER;
 
EXISTE_ORIGEN BOOLEAN;
EXISTE_DESTINO BOOLEAN;
 
 
 
/* Se debe comprobar que la familia destino no es hija de la familia origen. 
Para ello debemos crear una función recursiva auxiliar que haga dicha comprobación.*/
 
FUNCTION COMPROBACION (ID_ORIGEN NUMBER, ID_DESTINO NUMBER) RETURN BOOLEAN IS HIJA BOOLEAN;
  BEGIN
  SELECT FAM INTO ES_PADRE FROM FAMILIAS WHERE IDENTIFICADOR.FAMILIAS = ID_DESTINO;
  IF ES_PADRE IS NULL THEN RETURN FALSE;
  ELSE IF ES_PADRE = ID_ORIGEN THEN  RETURN TRUE;
    ELSE RETURN COMPROBACION(ID_ORIGEN, ES_PADRE);
  END IF;
  END IF;
END COMPROBACION;
 
BEGIN


Me gustaría que me explicarais realmente como funciona esa función "Comprobación"

Entiendo que coge el valor del "IDENTIFICADOR.FAMILIAS" y se lo asigna a ES_PADRE y si este es igual a ID_ORIGEN return TRUE , pero si no es lanza la función" ELSE RETURN COMPROBACION(ID_ORIGEN, ES_PADRE);" , esto es lo que no entiendo es como si volviera a lanzar la misma función pero cambia los parametros.

A ver si me podeis ayudar a comprenderla.

Gracias .
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