Vous êtes sur la page 1sur 23

Oracle Forms es un producto de software para crear pantallas que interactúan con

una base de datos Oracle . Tiene un IDE que incluye un navegador de objetos, una hoja
de propiedades y un editor de código que usa PL / SQL. Originalmente fue desarrollado
para ejecutar sesiones de terminal en modo de caracteres en el lado del servidor. Fue
portado a otras plataformas, incluido Windows, para funcionar en un entorno cliente-
servidor. Las versiones posteriores se trasladaron a Java, donde se ejecuta en un
contenedor Java EE y se puede integrar con Java y servicios web.
El objetivo principal de Forms es crear sistemas de entrada de datos que accedan a
una base de datos Oracle.

Cómo funciona
Oracle Forms accede a la base de datos Oracle y genera una pantalla que presenta los
datos. El formulario de origen (*. fmb) se compila en un "ejecutable" específico de
plataforma (* .fmx), que se ejecuta (interpreta) mediante el módulo de tiempo de ejecución
de formularios. El formulario se utiliza para ver y editar datos en aplicaciones basadas en
bases de datos. Se pueden colocar varios elementos de GUI, como botones, menús,
barras de desplazamiento y gráficos en el formulario. El código fuente también se puede
colocar en archivos de biblioteca (* .pll) que se compilan en ejecutables de biblioteca (*
.plx) utilizados en tiempo de ejecución.
El entorno proporciona modos incorporados de creación, consulta y actualización de
registros, cada uno con sus propias manipulaciones de datos predeterminadas.Esto
minimiza la necesidad de programar operaciones comunes y tediosas, como la creación de
SQL dinámico, la detección de campos modificados y el bloqueo de filas.

Paleta de Propiedades.
Cada objeto en un módulo Form, incluyendo el mismo Form, tiene propiedades que
dictan el comportamiento del mismo. Cuando se crea un objeto por primera vez, se
asignan automáticamente algunas propiedades de forma predeterminada. Puede cambiar
dichas propiedades en la Paleta de Propiedades.

Visualización de la Paleta de Propiedades.


Para mostrar la Paleta de Propiedades de un objeto, puede:
• Seleccione el objeto del Navegador de objetos y, a continuación, seleccione
Herramientas (Tools)> Paleta de Propiedades (Property Palette). Esto es equivalente a
seleccionar el objeto y presionar la tecla F4 ( ).
• Hacer doble clic en el icono del objeto en el Navegador de Objetos (No aplica para
objetos de código y Canvas).
• Hacer doble clic en un Item desde el Editor de Diseño.
• Dar doble clic en el objeto desde Editor de Diseño, luego seleccione la opción Paleta
de Propiedades.

______________________________________________________________________
________________
La Paleta de Propiedades: Características.
Elemento Descripción
Lista de Propiedades Muestra las propiedades que son válidas para un
objeto en particular. Las propiedades se agrupan bajo
encabezados o nodos funcionales. Puede expandir o
contraer un nodo utilizando los iconos más (+)/menos
(-) junto al nombre del nodo.
Campo Búsqueda Permite localizar rápidamente una propiedad en
particular.
Barra de Herramientas Es una serie de botones que provee acceso rápido a
ciertos comandos.
Ayuda (F1) Provee descripción, información sobre cualquier
propiedad. Seleccione la propiedad y presione la tecla
[F1].
Usando la Paleta de Propiedades.
Cada objeto de Form tiene varios tipos de propiedades. Dependiendo del tipo de
propiedad, estas se manipulan de forma diferente.
La siguiente lista resume los controles que se utilizan en la Paleta de Propiedades:
Control Descripción
Campo Texto Es mostrado cuando la propiedad se puede establecer
(Text field) introduciendo un valor de texto. Para valores de texto largos
aparece un botón icónico, que le permite abrir un editor de
texto.
Lista Ocurre cuando la propiedad permite un conjunto fijo de valores,
Emergente eje: Sí, No. Para establecer un valor, haga clic en la flecha hacia
(Pop-up list) abajo para abrir la lista y seleccionar un valor.
Ventana LOV Los LOVs ocurren cuando la propiedad permite una lista
potencialmente grande de valores posibles. Para establecer un
valor, haga clic en el botón icónico de la propiedad y allí
especifique la lista.
Botón Mas Usado cuando se necesitan configuraciones más complejas.
(More button) Haga clic en dicho botón para abrir el cuadro de diálogo
adicional.
Iconos de la Paleta de Propiedades.
En la paleta de propiedades, cada propiedad tiene un icono a su izquierda. A
continuación vemos una descripción resumida de estos iconos:
Icon Description
Circulo Especifica que la propiedad aún tiene el valor por
defecto.
Cuadrado Especifica que la propiedad fue cambiada de su valor
por defecto.
Flecha Especifica que la propiedad tiene un valor heredado.
Flecha con Cruz Especifica que la propiedad fue heredada pero que
ha sido anulada.
Nota: Una vez activada la paleta de propiedades, su ventana permanece abierta hasta
que la cierre. La ventana muestra automáticamente las propiedades de cada objeto que
seleccione del Editor de Diseño o del Navegador de Objetos. Esto se debe a que, de
forma predeterminada, la lista de propiedades de la paleta de propiedades se sincroniza
cada vez que se selecciona un objeto.

Puede activar o desactivar la sincronización de una paleta específica, haga clic en


Pin/Unpin ( ) en la barra de herramientas de la paleta de propiedades.

Los Atributos Visuales (Visual Attributes).


Los Atributos Visuales son propiedades como: color, el fuente, y el patrón usadas en los
objetos de Form.
Un Atributo Visual es a su vez un objeto que se puede crear en el Navegador de Objetos
con propiedades tales como fuentes, colores y combinaciones de patrones. Dicho objeto
tiene una propiedad llamada: Tipo de Atributo Visual (Visual Attribute Type) la cual
definimos de acuerdo al tipo de objeto al que se desea aplicar dicho atributo.
Eje: Se establece como Título (Title) si planea aplicarlo a objetos como títulos de
marcos; Si desea usarlo en Etiquetas (Prompts) seleccione Prompt; La otra opción es
Común (Common) para cualquier objeto en general.

Cada objeto de interfaz en una aplicación form tiene una propiedad denominada Grupo
de Atributo Visual (Visual Attribute Group), que determina cómo se derivan los
valores de atributos visuales individuales de un objeto. La propiedad Grupo de Atributo
Visual se puede establecer en Predeterminado (Default), NULL o el nombre de un
objeto de Atributo Visual. Los bloques tienen la propiedad Grupo de Atributo Visual
del Registro Actual (Current Record Visual Attribute Group) que define el atributo
visual que se utilizará para el registro seleccionado en el bloque.

Atributos Visuales Parciales.


Puede definir un atributo visual estableciendo únicamente las propiedades que desea
que sean heredadas por los objetos que las utilizan. Esto significa que puede aplicar un
atributo visual que cambia el color de fuente sin tener que establecer el nombre de la
fuente.

Usando Atributos Visuales.


Para utilizar un atributo visual, realice los pasos siguientes:
1. Cree el atributo visual:
• Seleccione el nodo Atributos visuales en el Navegador de objetos.
• Haga clic en Crear.
• Seleccione el Atributo y invoque la Paleta de Propiedades (F4), luego establezca las
propiedades de fuente, color y patrón que desee.
2. Seleccione algun objeto de Form y establezca la propiedad Visual con el nombre del
Visual Atribute creando anteriormente.
• Para Items y Canvas la propiedad es Visual Attribute Group.
• Para bloques, la propiedad es Current Record Visual Attribute Group.
3. Ejecute el Form para ver los cambios.

Las Propiedades de los Bloques de Datos.

Los bloques de datos tienen varias propiedades, estas


se dividen los grupos mostrados en la siguiente imagen:

Puede modificar las propiedades del bloque para controlar tanto la apariencia como el
comportamiento del mismo.

Grupos de propiedades en los bloques de datos:


General
Navegación
Archivos
Base de datos
Base de Datos Avanzada
Barra de desplazamiento
Atributos visuales
Color
Internacional

______________________________________________________________________
________________
Controlando el Comportamiento de los Bloques de Datos.
Configuración de las Propiedades de Navegación.
• Estilo de Navegación (Navigation Style).
Normalmente, cuando se navega más allá del último elemento de un registro,
Forms devuelve el cursor al principio del mismo registro. Con la propiedad Estilo
de Navegación, puede cambiar este comportamiento para hacer que el cursor se
desplace al siguiente registro o a otro bloque de datos. Los valores válidos son: Mismo
Registro (predeterminado), Cambiar Registro o Cambiar Bloque de Datos.
Eje: Si desea que el cursor se mueva al siguiente registro cuando llegue al final del
registro actual, establezca la propiedad Estilo de Navegación del bloque a Cambiar
Registro.
• Anterior/Siguiente Bloque de Navegación (Previous/Next Navigation Data Block).
Normalmente, cuando en tiempo de ejecución se realiza una operación para moverse al
bloque de datos anterior/siguiente, Forms mueve el control al bloque de datos adyacente
anterior/siguiente en secuencia. Estas propiedades le permiten nombrar el bloque de
datos anterior/siguiente.

Configuración de las Propiedades Registro (Record).


• Grupo de atributos visuales del Registro Actual (Current Record Visual Attribute
Group): Es el atributo visual que se usará para resaltar el registro actual en el bloque de
datos.
• Tamaño de Matriz de Consulta (Query Array Size): Especifica el número máximo de
registros que Forms debe extraer de la base de datos al mismo tiempo. Un valor inferior
en este valor de propiedad significa un tiempo de respuesta más rápido; Sin embargo, un
valor mayor significa menos llamadas a la Base de Datos, lo que da como resultado un
tiempo de procesamiento global reducido. Cuando se establece en 0, por defecto toma el
número de registros mostrados.
• Número de Registros en Búfer (Number of Records Buffered): Es la cantidad
mínima de espacio de búfer retenida para mantener los registros consultados en el
Bloque de Datos. El valor mínimo permitido es el valor de la propiedad Número de
Registros Mostrados (Number of Records Displayed) más 3. Forms almacena cualquier
registro adicional en un archivo de disco temporal. Un valor alto mejora la velocidad de
procesamiento, pero utiliza más memoria.
• Número de Registros Mostrados (Number of Records Displayed): Esta propiedad
especifica el número máximo de registros a mostrar en el Canvas al mismo tiempo y el
número de registros que puede ver a la vez. Si cambia este valor, asegúrese de que haya
espacio suficiente en el Canvas para el número de registros especificado.
• Consultar todos los Registros (Query All Records): esta propiedad especifica si todos
los registros que coinciden con los criterios de consulta se deben traer cuando se ejecuta
una consulta.
• Orientación del Registro (Record Orientation): Esta propiedad determina la
orientación de los registros en el bloque de datos, horizontal o vertical. Cuando
establece esta propiedad, Forms Builder ajusta la posición de visualización de los items
en el bloque de datos de forma apropiada.
• Registro Único (Single Record): Esta propiedad especifica que el Bloque es de tipo
Control y debe contener un solo registro. Establezca esta propiedad en Sí (Yes) para un
Bloque de Control que contenga un item que represente el resumen de un monto
calculado. No puede establecer esta propiedad en Sí para un bloque de datos.

Configuración de las Propiedades de Base de Datos.


En el grupo de Propiedades de Base de Datos, puede establecer numerosas propiedades
para controlar la interacción con el servidor de Base de Datos. Algunas de estas
propiedades son:
• Bloque de datos de base de datos (Database Data Block): Establezca en Sí si el
bloque de datos se basa en un objeto de base de datos y en No si es un bloque de
control.
• Aplicar clave primaria (Enforce Primary Key): controla si Forms comprueba la
unicidad antes de insertar o actualizar registros en la tabla base, para evitar que se
cometan filas duplicadas en la base de datos. Un valor de Sí significa que el formulario
comprueba que los registros insertados o actualizados son únicos antes de que se realice
un intento de validación de posibles filas duplicadas.
• Query/Insert/Update/Delete Allowed: Controlar si las operaciones asociadas pueden
realizarse en los registros del bloque de datos.
• Tipo de fuente de datos de la consulta (Query Data Source Type): Especifica el
tipo de origen de datos de la consulta para el bloque de datos. Los valores posibles para
esta propiedad son None, Table, Procedure, Triggers transaccionales o consulta con
cláusula FROM.
• Nombre de la fuente de datos de la consulta (Query Data Source
Name): Especifica el nombre de la fuente de datos de la consulta para el bloque de
datos. Esta propiedad sólo se utiliza si si el tipo de fuente de datos de consulta es Table,
consulta con cláusula FROM o Procedure.
• Columnas de la fuente de datos de la consulta (Query Data Source Columns):
Aquí se especifica el nombre y el tipo de dato de las columnas asociadas con la
fuente de datos de la consulta. Esta propiedad sólo se utiliza si el tipo de fuente de datos
es Table, consulta con cláusula FROM o Procedure.
• Argumentos de la fuente de datos de la consulta (Query Data Source
Arguments): Aquí se especifican los nombres, tipos de datos y valores de los
argumentos a ser pasados al procedimiento que retornara los datos. Esta propiedad sólo
es válida cuando la propiedad Query Data Source Type se establece en Procedure.
• Cláusula WHERE: Especifica una condición SQL que se adjunta a la sentencia
SELECT del bloque de datos a través de SQL implícito; Se utiliza para definir
restricciones generales en las filas que este bloque de datos puede recuperar. Esta
cláusula agrega automáticamente un (AND) con cualquier condición suministrada por el
operador en el modo Enter Query.
• Cláusula ORDER BY: Define una orden predeterminado para los registros mostrados
por la consulta.
• Optimizer Hint: Especifica una cadena Hint que Forms pasa al Optimizador cuando
construye SQL implícito en el bloque de datos. El Optimizador puede mejorar el
rendimiento de las transacciones de base de datos.
• Modo de bloqueo / modo de tecla (Locking Mode/Key Mode): controla cómo
Forms maneja registros y transacciones cuando el bloque de datos está asociado
principalmente a orígenes de datos que no son de Oracle. La configuración
predeterminada suele ser apropiada para bloques de datos conectados con una base de
datos Oracle.
• Solo Actualizar las Columnas modificadas (Update Changed Columns
Only): cuando esta en Sí, sólo se escribe en sus columnas de base de datos asociadas
con los items actualizados por el operador. Si el operador comúnmente actualiza o
inserta registros con sólo una o dos columnas, esto puede ahorrar tráfico de red. De
forma predeterminada, la propiedad contiene No, por lo que todas las columnas se
incluyen en la instrucción UPDATE predeterminada.
• Aplicar la seguridad de la columna (Enforce Column Security): cuando esta
propiedad está establecida en Sí, los items del bloque de datos sólo se pueden actualizar
si el usuario actual tiene privilegios para actualizar las columnas de la base de datos
correspondientes.
• Tiempo máximo de consulta (Maximum Query Time): Proporciona la opción de
anular una consulta cuando el tiempo transcurrido de la misma supera el valor de esta
propiedad; Útil cuando la propiedad Query All Records contiene Yes.
• Maximum Records Fetched: Proporciona la opción de anular una consulta cuando el
número de registros obtenidos excede el valor de esta propiedad; Útil cuando la
propiedad Query All Records contiene Yes.

Propiedades de la Barra de Desplazamiento (Scrollbar).


En el grupo de barra de desplazamiento, puede establecer numerosas propiedades
relativas a la apariencia y función de la barra de desplazamiento del bloque de datos.
Algunas de estas propiedades son:
• Mostrar Barra de Desplazamiento (Show Scroll Bar): Especifica si Forms Builder
debe crear una barra de desplazamiento para el bloque de datos. Para eliminar una barra
de desplazamiento existente, establezca esta propiedad en No.
• Canvas de la Barra de Desplazamiento: Especifica el Canvas en el que se mostrará
la barra de desplazamiento para el bloque de datos en cuestión.
• Orientación de la Barra de Desplazamiento: Especifica si la barra de
desplazamiento debe mostrarse horizontal o verticalmente.
• Posición X/Y de la Barra de Desplazamiento: Especifica las coordenadas x e y
(medidas en las unidades del sistema de coordinación del Form) donde se mostrará la
barra de desplazamiento en el Canvas. El valor predeterminado para ambas
coordenadas es 0.
• Largo/Ancho de la Barra de Desplazamiento (Scroll Bar Width/Height):
Especifica el ancho y la largo de la barra de desplazamiento.

______________________________________________________________________
________________
Las Propiedades los Frames.
Las modificaciones realizadas en el Asistente de Diseño (Layout Wizard) al crear un
bloque de datos se registran como propiedades de un Objeto tipo Frame. Puede cambiar
dichas propiedades para modificar la estructura de los items dentro de un bloque de
datos.
Algunas Propiedades importantes:
• Layout Data Block: Especifica el nombre del bloque de datos al que está asociado
el Frame. Los items dentro de este bloque de datos están organizados dentro
del Frame.
Nota: Un bloque de datos se puede asociar con un solo Frame. No puede organizar un
item dentro de varios Frames.
• Actualizar diseño (Update Layout): especifica cuando se actualiza el diseño
del Frame. Las opciones son:
---Automáticamente: el diseño se actualiza cada vez que mueve o cambia el tamaño
del Frame o modifica cualquier propiedad del mismo.
---Manualmente: el diseño se actualiza cada vez que utilice el Asistente para Diseño
para modificar el Frame o en el Editor de Diseño cuando hace clic en Actualizar
Diseño o cuando selecciona la opción de Diseño (Layout)>Actualizar Diseño (Update
Layout).
---Bloqueado: el diseño se bloquea y no se puede actualizar.
• Estilo de Diseño: Especifica el estilo de diseño de los items dentro del Frame. Elija
entre los estilos Formulario y Tabular.
• Distancia entre Registros: Especifica la distancia física (medida en las unidades del
sistema de coordinación del Form) con la que se separara los registros mostrados en el
Frame.
• Posición X/Y: Especifica las coordenadas x e y (medidas en las unidades del sistema
de coordinación del Form) de la posición del Frame en el Canvas.
• Ancho/Largo: Especifica el ancho y la largo del Frame (medida en las unidades del
sistema de coordinación del Form).
Nota: Puede organizar un Frame, así como los objetos dentro de él manualmente en el
Editor de Diseño.
______________________________________________________________________
________________
Visualización de varias Paletas de Propiedades.
Es posible que desee ver las propiedades de varios objetos simultáneamente o que desee
ver mas propiedades de un objeto en particular sin tener que desplazarse hacia
abajo/arriba en la Paleta de Propiedades. Para lograr cualquiera de estas cosas, puede
hacer lo siguiente:
Para abrir varias paletas de un mismo objeto:
1. Abra una paleta de propiedades para el objeto.
2. Mantenga presionada la tecla [Shift] y haga doble clic en el icono de objeto del objeto
en el Navegador de Objetos.
Más de una paleta de propiedades para varios objetos:
1. Abra la paleta de propiedades del primer objeto.
2. Haga clic en Pin/Unpin( ) en la barra de herramientas para "congelar" esta
paleta.
3. Invoque la paleta de propiedades para otro objeto. Esta paleta de propiedades aparece
en una ventana separada.
Si la segunda ventana está encima de la primera, arrástrela para que ambas ventanas
estén visibles.

Configurando las Propiedades de varios Objetos.


Puede ver y configurar simultáneamente las propiedades de varios objetos, ya sean del
mismo tipo o de tipos diferentes. Puede seleccionar los objetos en el Navegador de
Objetos y mostrar una combinación de propiedades en la paleta de propiedades.
La combinación puede ser:
• Intersection ( ): Un subconjunto en el que sólo se muestran las propiedades
comunes de los objetos seleccionados (Este es el operador predeterminado).
• Unión ( ): un superconjunto en el que se muestran tanto las propiedades comunes
como las propiedades únicas de los objetos seleccionados.

Si selecciona varios objetos y visualiza sus propiedades, notara algunas con un valor en
asteriscos *****, esto es porque los objetos tienen valores diferentes en esas
propiedades. Si cambia una de esas propiedades con los objetos aun seleccionados, este
nuevo valor se aplica entonces a cada uno de los objetos seleccionados.

Para establecer propiedades en varios objetos al mismo tiempo, realice los pasos
siguientes:
1. Abra la paleta de propiedades para uno de los objetos.
2. Mantenga presionada la tecla [Ctrl] y haga clic en los demás objetos. Al seleccionar
varios notara como las propiedades cambian en combinación.
3. Establezca el botón Intersección/Unión ( / )de la barra de herramientas en la
paleta de propiedades a la operación deseada. Este botón cambia entre las dos opciones.
4. Cambie las propiedades mostradas, según sea necesario. Sus cambios se aplican a
todos los objetos seleccionados que contengan estas propiedades.
Nota: Con un Unión, puede ver algunas propiedades que no son relevantes para todos
los objetos seleccionados. Los cambios en una propiedad se aplican sólo a los objetos
que la contienen.

Copiando Propiedades.
Puede copiar las propiedades y los valores de la paleta de propiedades a un búfer para
que se puedan aplicar (pegar) a otros objetos en su sesión de diseño. Para copiar
propiedades, realice los pasos siguientes:
1. En la paleta de propiedades establezca las propiedades que se van a copiar. Puede ser
de un objeto o una combinación de objetos.
---Para copiar todos los ajustes de propiedades, seleccione Editar (Edit)>Seleccionar
todo (Select All).
---Para copiar solo los ajustes de las propiedades seleccionadas, mantenga presionada la
tecla [Ctrl] mientras hace clic en cada propiedad individualmente.
2. Haga clic en Copiar propiedades ( ) en la barra de herramientas de la paleta de
propiedades.
3. En el Navegador de objetos, seleccione el objeto al que se van a copiar las
propiedades.
4. En la paleta de propiedades, haga clic en Pegar propiedades ( ). El objeto
seleccionado recibe todas las propiedades copiadas que son relevantes de acuerdo a su
tipo.
Nota: Es posible copiar la configuración de propiedades de un objeto a objetos de
diferentes tipos. En este caso, las propiedades que no se aplican al objeto de destino se
ignoran.

Clases de Propiedad (Property Classes).Cuando muestra una lista de propiedades (de


un objeto o de una combinación de objetos) en la paleta de propiedades, la lista
propiedades y valores asociados se pueden guardar para aplicaciones futuras en otros
objetos. Esto se conoce como una Clase de Propiedad, que es a su vez un objeto Forms
Builder.
Los objetos pueden heredar algunas de sus propiedades de una Clase de Propiedad que
tengan vinculada, por lo que sus propiedades cambiarán automáticamente si las
propiedades asociadas se cambian en dicha Clase.

Creando un Bloque de Control.


Un Bloque de Control es un bloque que no está asociado con ninguna Base de Datos y
sus Items no se relacionan con ninguna columna dentro de una tabla de la base de datos.
Esto significa que Forms no realiza una consulta automática cuando el operador emite
un comando Enter Query o Execute Query tampoco emite un Insert, Update o Delete
automático para el bloque cuando el operador guarda los cambios en la base de datos.

Cómo crear un bloque de control:


1. En el Navegador de objetos, haga clic en el nodo Bloques de Datos ( ).
2. Haga clic en el icono Crear( ) de la barra de herramientas o (con el nodo Bloques
de Datos seleccionado) presione Editar (Edit)> Crear (Create).
3. En el cuadro de diálogo Nuevo bloque de datos, seleccione la opción "Crear un nuevo
bloque de datos manualmente (Build a new data block manually)".
4. Abra la paleta de propiedades del nuevo bloque de datos y cambie el nombre y
establezca la propiedad Database Data Block en NO.
Nota: Como no hay columnas de base de datos en las que basar los items de un bloque
de control, debe posteriormente agregar manualmente los items que necesite.

Eliminación de los Bloques de Datos.


Para eliminar un bloque de datos:
1. Seleccione el bloque que desea eliminar del Navegador de objetos.
2. Haga clic en el icono Eliminar( ) de la barra de herramientas o Pulse la tecla
[Delete].
3. Aparece una alerta para confirmar la eliminación. Haga clic en Sí para completar la
operación.
Nota: La eliminación de un bloque de datos también elimina sus objetos subordinados
(Items y Triggers ). Si el bloque de datos era un bloque maestro o detalle en una
relación, la relación también se elimina. Sin embargo, el Frame y su título
permanecerán. Elimine el Frame manualmente en el Editor de diseño.

El Cálculo relacional
es un lenguaje de consulta que describe la respuesta deseada sobre una Base de
datos sin especificar como obtenerla, a diferencia del Álgebra relacional que es de tipo
procedimental, el cálculo relacional es de tipo declarativo; pero siempre ambos métodos
logran los mismos resultados.
CARACTERISTICAS:
 Lenguaje de Consulta para bases de datos relacionales

 Se utiliza para manipulación de datos a partir de las relaciones


 Basado en el Cálculo de Predicados de Primer Orden (refleja las relaciones
que existen entre los elementos de un dominio)
 Variantes: de tuplas y de dominio
TIPOS:

a. Calculo relacional orientado a tuplas:


Como ya se comentó, este lenguaje está basado en el cálculo de predicados
utilizando variables-tupla que representan tuplas, esto obliga a introducir
algunos cambios en las definiciones comentadas anteriormente, y que
pasamos a exponer.

 Variables-tupla.
Anteriormente habíamos supuesto una lógica homogénea, es decir, el dominio
de las variables coincidía con el conjunto de constantes del lenguaje. En el
CRT ya no es así. Cada variable-tupla x se define sobre una intensión
(esquema) de una relación R:

UCLM-ESI (F.Ruiz) BDa-4cr: Cálculo Relacional. 10

X : R tal que R (a1:dom1, a2:dom2, ..., an:domn)


De esta forma, se especifica de qué relaciones tomarán valores las variables.
La variable x tomará valores en el producto cartesiano de todos los dominios de
R, dom1 × dom2 ×... × domn.
Ejemplos:
 En una comparación simple todas las ocurrencias son libres:
x.A = y.B
x.A = 'Dedalo'
Todas las ocurrencias de x e y son libres.
 Las ocurrencias de variables-tupla en (F) y ¬F son libres o ligadas según sean
libres o ligadas en F:
¬ ( x.ciudad='Londres')
La ocurrencia de x es libre.
 Las ocurrencias de variables-tupla en F ∧ G y en F ∨ G son libres o ligadas
según
Sean libres o ligadas en F o en G, según donde ocurran:
(x.codigo=y.codigo ∧ y. Numero<>z.numero) Todas las ocurrencias de x,
y, z son libres.

 Las ocurrencias de x que son libres en F son ligadas en ∃x(F) y en ∀x(F). Otras
ocurrencias de variables-tupla en F serán libres o ligadas en dichas fbf según lo
sean en F.

b. Cálculo relacional de tuplas restringido:

El CRT, tal y como lo hemos definido, permite expresiones como


{ t ¬R(t) } que denota todas las posibles tuplas tales que no estén en R. Hay
que tener en cuenta que mientras que el conjunto de tuplas que pertenecen a
una relación es perfectamente conocido, el conjunto de tuplas que no
pertenecen a ella dependerá de los dominios de la definición de dicha relación.
Puesto que en las bases de datos suele ser habitual que aparezcan dominios
de cardinalidad infinita o prácticamente infinita, esto nos podría llevar a intentar
manipular relaciones de cardinalidad también infinita. Por otra parte, el sentido
de tales preguntas difícilmente se puede aceptar en las bases de datos
relacionales.

 Dominio de una fórmula.

El dominio de una fórmula F, que se representa por dom(F), corresponde al


rango de valores permitidos para una fórmula. Su definición es la siguiente:

Dada una fórmula F que contiene los símbolos de predicados P1, P2,..., Pk
(siendo R1, R2,..., Rk las relaciones que tienen asignadas respectivamente) y
los símbolos de constantes a1,
a2,..., ap., el dominio de F se define como:

Dom (F)= {a1, a2,..., ap.} ∪ {valores de los atributos de las tuplas de R1, R2,...,
Rk}

Puesto que las relaciones R1, R2,..., Rk son conjuntos finitos, también lo será
dom (F).

Ejemplos:

Veamos todos los conceptos anteriores con el siguiente ejemplo:


Sean R y S dos relaciones con las extensiones siguientes:
R
A B
3 4
2 2

S
A B
1 2
2 4
3 5

y dos preguntas E1 y E2 representadas por las dos expresiones siguientes:

E1: {x R(x) ∨ ¬S(x)} dom (E1) = {1, 2, 3, 4, 5}


E2: {x R(x) ∧ ¬S(x)} dom (E2) = dom (E1)

La primera expresión E1 contiene una fórmula abierta que no es segura ya que,


por ejemplo, la tupla (3,7) hace cierta la fórmula y, sin embargo, el valor 7 no
pertenece a dom (E1).

La segunda expresión E2 contiene una fórmula abierta que si es segura. Si t es


una tupla que hace cierta dicha fórmula, también debe ser cierta R(t) y, por
tanto, cada valor de cada atributo de t pertenece a dom (E2).

c. Cálculo relacional de dominios.

Esta segunda modalidad de cálculo relacional se diferencia de la ya vista en


que se emplean variables-dominio. Las expresiones en el cálculo relacional de
dominios (CRD) se construyen siguiendo unos principios análogos. Los
cambios respecto de lo ya visto son bastante pequeños, por lo que la
exposición será más reducida y se limitará a señalar dichas diferencias.

Variables-dominio.

Las variables en este lenguaje se denominan variables-dominio ya que toman


valores en el asociado a alguno de los atributos de una relación en vez de
representar una tupla entera, como en el CRT. La definición de una variable-
dominio será del tipo:

X: domk

De esta forma la variable x tomará valores en el dominio domk.

Ejemplo:
a
x
'hola'

Los átomos o fórmulas atómicas toman una de las dos formas siguientes:

R (t1, t2,..., tn), donde R es una relación de grado igual a n o superior, y t1,
t2,..., tn son términos. Los términos han de pertenecer a los dominios
asociados a los atributos de la relación.

t1 θ t2, donde t1 y t2 son términos y θ es un operador de comparación.


La definición de fórmula bien formada (fbf) sigue siendo la misma que para el
CRT.

d. Cálculo relacional de dominios restringido.

Análogamente al CRT, es necesario restringir el CRD para no permitir


expresiones como la siguiente:

{ x ࣦ ¬R(x) }

que podría dar como resultado una relación de cardinalidad infinita, con los
consiguientes problemas que esta situación plantea. Se hace necesario, por
tanto, restringir el CRD para que únicamente sean válidas las fórmulas
llamadas seguras.
Para definir estas fórmulas también nos hace falta el concepto de dominio de
una fórmula, que coincide totalmente con el indicado anteriormente para el
CRT.

EJEMPLOS:

01)

DEPARTAMENTO (cod_dep: tira (5), nombre: tira (40), director: tira (30),
Teléfono: entero)

ASIGNATURA (cod_asg: tira (3), nombre: tira (40), semestre: tira (2),
Teoría: real, prác: real, cod_dep: tira (5))

PROFESOR (cod_pro: tira (3), nombre: tira (40), teléfono: entero,


cod_dep: tira (5))

DOCENCIA (cod_asg: tira (3), cod_pro: tira (3), gteo: entero, gpra: entero)

02)

Consulta: “Nombres de profesores que imparten BDA”


PX: Profesor
DX: Docencia
{PX.nombre | Profesor (PX) ∧ ∃DX (Docencia (DX) ∧ DX.cod_pro=PX.cod_pro
∧ DX.cod_asg=‘BDA’)}
Descripción: Tanto% TYPE como% ROWTYPE se usan para definir variables en PL / SQL tal como se define
dentro de la base de datos. Si el tipo de datos o la precisión de una columna cambian, el programa
automáticamente recoge la nueva definición de la base de datos.

Las construcciones% TYPE y% ROWTYPE proporcionan independencia de datos, reducen los costos de
mantenimiento y permiten que los programas se adapten a medida que cambia la base de datos.

%TYPE se utiliza para declarar un campo con el mismo tipo que el de la


columna de una tabla especificada: DECLARAR v_EmpName emp . ename %
TYPE ; BEGIN SELECT esame INTO v_EmpName FROM emp WHERE ROWNUM = 1 ;
DBMS_OUTPUT . PUT_LINE ( 'Nombre =' || v_EmpName ) ; FINAL ; / -

%ROWTYPE se utiliza para declarar un registro con los mismos tipos que
: se encuentra en la tabla, vista o cursor de la base de datos
especificada: DECLARAR v_emp emp % ROWTYPE ; BEGIN v_emp . empno : =
10 ; v_emp . ename : = 'XXXXXXX' ; FINAL ; /

Funciones integradas de PL/SQL


PL/SQL tiene un gran número de funciones incorporadas, sumamente útiles. A continuación
vamos a ver algunas de las más utilizadas.

SYSDATE
Devuelve la fecha del sistema:

SELECT SYSDATE FROM DUAL;

NVL
Devuelve el valor recibido como parámetro en el caso de que expresión sea NULL,o
expresión en caso contrario.

NVL(, )

El siguiente ejemplo devuelve 0 si el precio es nulo, y el precio cuando está informado:

SELECT CO_PRODUCTO, NVL(PRECIO, 0) FROM PRECIOS;

DECODE
Decode proporciona la funcionalidad de una sentencia de control de flujo if-elseif-else.

DECODE(, , [, ..., , ], )

Esta función evalúa una expresión "", si se cumple la primera condición "" devuelve el
valor1"", en caso contrario evalúa la siguiente condición y así hasta que una de las condiciones
se cumpla. Si no se cumple ninguna condición se devuelve el valor por defecto.
Es muy común escribir la función DECODE identada como si se tratase de un bloque IF.

SELECT DECODE (co_pais, /* Expresion a evaluar */'ESP', 'ESPAÑA',


/* Si co_pais = 'ESP' ==> 'ESPAÑA' */ 'MEX', 'MEXICO',
/* Si co_pais = 'MEX' ==> 'MEXICO' */ 'PAIS '||co_pais)
/* ELSE ==> concatena */
FROM PAISES;

TO_DATE
Convierte una expresión al tipo fecha. El parámetro opcional formato indica el formato de
entrada de la expresión no el de salida.

TO_DATE(, [])

En este ejemplo convertimos la expresion '01/12/2006' de tipo CHAR a una fecha (tipo
DATE). Con el parámetro formato le indicamos que la fecha está escrita como día-mes-año para
que devuelve el uno de diciembre y no el doce de enero.

SELECT TO_DATE('01/12/2006',
'DD/MM/YYYY')
FROM DUAL;

Este otro ejemplo muestra la conversión con formato de día y hora.

SELECT TO_DATE('31/12/2006 23:59:59',


'DD/MM/YYYY HH24:MI:SS')
FROM DUAL;

TO_CHAR
Convierte una expresión al tipo CHAR. El parámetro opcional formato indica el formato
de salida de la expresión.

TO_CHAR(, [])

SELECT TO_CHAR(SYSDATE, 'DD/MM/YYYYY')


FROM DUAL;
TO_NUMBER
Convierte una expresion alfanumérica en numerica. Opcionalmente podemos especificar el
formato de salida.

TO_NUMBER(, [])

SELECT TO_NUMBER ('10')


FROM DUAL;

TRUNC
Trunca una fecha o número.
Si el parámetro recibido es una fecha elimina las horas, minutos y segundos de la misma.

SELECT TRUNC(SYSDATE)FROM DUAL;

Si el parámetro es un número devuelve la parte entera.

SELECT TRUNC(9.99)FROM DUAL;

LENGTH
Devuelve la longitud de un tipo CHAR.

SELECT LENGTH('HOLA MUNDO')FROM DUAL;

INSTR
Busca una cadena de caracteres dentro de otra. Devuelve la posicion de la ocurrencia de la
cadena buscada.
Su sintaxis es la siguiente:

INSTR(, , , )

SELECT INSTR('AQUI ES DONDE SE BUSCA', 'BUSCA', 1, 1 )


FROM DUAL;
REPLACE
Reemplaza un texto por otro en un expresion de busqueda.

REPLACE(, , )

El siguiente ejemplo reemplaza la palabra 'HOLA' por 'VAYA' en la cadena 'HOLA MUNDO'.

SELECT REPLACE ('HOLA MUNDO','HOLA', 'VAYA')--devuelve VAYA MUNDO


FROM DUAL;

SUBSTR
Obtiene una parte de una expresion, desde una posición de inicio hasta una determinada
longitud.

SUBSTR(, , )

SELECT SUBSTR('HOLA MUNDO', 6, 5) -- Devuelve MUNDO


FROM DUAL;

UPPER
Convierte una expresion alfanumerica a mayúsculas.

SELECT UPPER('hola mundo') -- Devuelve HOLA MUNDO


FROM DUAL;

LOWER
Convierte una expresion alfanumerica a minúsculas.

SELECT LOWER('HOLA MUNDO') -- Devuelve hola mundo


FROM DUAL;

ROWIDTOCHAR
Convierte un ROWID a tipo caracter.

SELECT ROWIDTOCHAR(ROWID)
FROM DUAL;

RPAD
Añade N veces una determinada cadena de caracteres a la derecha una expresión. Muy util
para generar ficheros de texto de ancho fijo.
RPAD(, , )

El siguiente ejemplo añade puntos a la expresion 'Hola mundo' hasta alcanzar una longitud
de 50 caracteres.

SELECT RPAD('Hola Mundo', 50, '.')


FROM DUAL;

LPAD

Añade N veces una determinada cadena de caracteres a la izquierda de una expresión. Muy
util para generar ficheros de texto de ancho fijo.

LPAD(, , )

El siguiente ejemplo añade puntos a la expresion 'Hola mundo' hasta alcanzar una longitud
de 50 caracteres.

SELECT LPAD('Hola Mundo', 50, '.')


FROM DUAL;

RTRIM
Elimina los espacios en blanco a la derecha de una expresion

SELECT RTRIM ('Hola Mundo ')


FROM DUAL;

LTRIM
Elimina los espacios en blanco a la izquierda de una expresion

SELECT LTRIM (' Hola Mundo')


FROM DUAL;

TRIM
Elimina los espacios en blanco a la izquierda y derecha de una expresion

SELECT TRIM (' Hola Mundo ')


FROM DUAL;

MOD
Devuelve el resto de la división entera entre dos números.

MOD(, )
SELECT MOD(20,15) -- Devuelve el modulo de dividir 20/15
FROM DUAL

Vous aimerez peut-être aussi