Para manipular la información de una base de datos jerárquico, es necesario emplear un lenguaje de manipulación de datos, el lenguaje consta de varias órdenes que están incorporadas en un lenguaje principal, Pascal.
La orden Get
La recuperación de datos se realiza mediante esta orden, se realizan las siguientes acciones:
- Localiza un registro en la base de datos y actualiza a un puntero que es el que mantiene la dirección del último registro accesado.
- Copia los datos solicitados a un tipo de registro apropiado para la consulta.
La orden Get debe especificar en cual de los árboles de la base de datos se va a buscar.
Para revisar todos los registros de forma consistente, se debe imponer un orden en los registros. El que normalmente se usa es el preorden, el cuál consiste en iniciar la búsqueda por la raíz y continua buscando por los subárboles de izquierda a derecha recursivamente. Así pues, empezamos por la raíz, visitamos el hijo más a la izquierda, y así sucesivamente, hasta que alcancemos un nodo hoja (sin hijos). A continuación movemos hacia atrás al padre de la hoja y visitamos el hijo más a la izquierda no visitado. Continuamos de esta forma hasta que se visite todo el árbol.
Existen dos ordenes Get diferentes para localizar registros en un árbol de base de datos. La orden más simple tiene la forma:
get fisrt<Tipo de registro>
where <Condición>
La cláusula where es opcional. La <Condición> que se adjunta es un predicado que puede implicar a cualquier tipo de registro que sea un antecesor de <tipo registro> o el <Tipo de registro> mismo.
La orden get localiza el primer registro (en preorden) del tipo <Tipo registro> en la base de datos que satisfaga la <condición > de la cláusula where. Si se omite la cláusula where, entonces se localiza el primer registro del tipo <Tipo registro>. Una vez que se encuentra ese registro, se hace que el puntero que tiene la dirección del último registro accesado apunte a ese registro y se copia el contenido del registro en un registro apto para la consulta.
Para ilustrar lo anterior veamos los ejemplos:
Realicemos una consulta que imprima El nombre del alumno llamado Luis A. (consideremos la relación Alumno-Materia que hemos estado manejando.)
get first Alumno
whereAlumno.NombreA="Luis A.";
print(Alumno.Control)
Ahora consideremos que deseamos la consulta de los nombres de las materias en donde el alumno de nombre Luis A. A obtenido una calificación igual a 100 (si es que existe)
get firstAlumno
whereAlumno.NombreA="Luis A." and Cursa.cal= 100;
ifDB-Status=0 then print (Materia.NombreM);
La condición involucra a la variable DB-Status, la cual nos indica si se encontró o no el registro.
La orden get first, solo nos muestra el primer registro encontrado que satisfaga la orden de consulta, sin embargo puede haber más de ellos, para localizar a los demás registros empleamos la orden Get next.
Cuya estructura es:
get next<Tipo de registro>
where <Condición>
La cual localiza el siguiente registro en preorden que satisface la condición. Si se omite la cláusula where, entonces se localiza el siguiente registro del tipo <Tipo registro>.