Está en la página 1de 389

1 Conceptos iniciales

La base de datos provee muchas características útiles y poderosas. Muchas de estas características están
incorporadas al nivel de SQL. SQL ha sido adoptado por la mayoría de los sistemas de gestión de base de datos
relacionales (RDBMS). ANSI (American National Standards Institute) ha estado perfeccionando estándares del
lenguaje SQL en los últimos 20 años. Oracle, como muchas otras compañías, ha adoptado el estándar ANSI de
SQL y lo ha extendido para incluir un gran número de funcionalidades adicionales.

El desarrollo de software para la gestión de información ha transitado por diferentes etapas, desde
implementaciones sobre un sistema de archivos hasta las bases de datos relacionales y relacionales objeto. En
la actualidad existen complejos sistemas de gestión de base de datos (DBMS), como Server, los cuales proveen
funcionalidades de almacenamiento y acceso eficiente a datos, y diversas otras funcionalidades relacionadas a
la gestión integral de datos.

Con el advenimiento de la teoría de objetos y la proliferación del paradigma de orientación a objetos como base
para el desarrollo de aplicaciones de software, surge en el campo de las bases de datos la necesidad de adaptar
un modelo para mapear en forma directa, en la base de datos, los objetos manipulados por la aplicación de
software. En este sentido, surgen las bases de datos objeto relacionales (ORDBMS) como una adaptación de las
bases de datos relacionales brindando, a través de una capa de objetos, una interfase orientada a objetos que
permite almacenar, acceder y recuperar datos objeto. Server, además de continuar dando soporte a la
tecnología relacional, también soporta la tecnología objeto relacional brindando todas las funcionalidades
necesarias para la gestión de datos objeto.

1.1 Introducción

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en cuenta la
relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas o
unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a los
tratados en el Material del Estudiante (Kit).

• Prácticas: Actividades de laboratorios e interactivas incluidas como práctica adicional al Material del
Estudiante (Kit).
1.1 Introducción
1.1.1 Objetivos
Esta sección brinda una visión general acerca de una base de datos Oracle cubriendo los aspectos básicos,
teóricos y físicos de bases de datos relacionales, implementación Oracle RDBMS y ORDBMS.

También se abordará el modelado de datos, una introducción al lenguaje de consultas SQL y beneficios del
lenguaje PL/SQL.

Además se realizará una introducción a iSQL*Plus, que es un entorno utilizado para ejecutar sentencias SQL
1.1.1 Objetivos
1.1.1.1 Funciones
Funciones de Oracle10g

La versión Oracle10g entrega una infraestructura exhaustiva de alto rendimiento, que incluye:

• Escalabilidad de departamentos a ubicaciones e-business de empresa.


• Arquitectura sólida, fiable, disponible y segura.
• Un modelo de desarrollo; sencillas opciones de despliegue.
• Saque provecho del juego de conocimientos actual de una organización en toda la plataforma Oracle
(lo que incluye SQL, PL/SQL, Java y XML)
• Una interfaz de gestión para todas las aplicaciones
• Tecnologías estándar de la industria, sin bloqueo propietario

Los tres productos de infraestructura de grid de la versión Oracle10g son:

• Base de Datos Oracle 10g


• Oracle Application Server 10g
• Oracle Enterprise Manager 10g Grid Control

Oracle ofrece una plataforma para Internet exhaustiva y de alto rendimiento para e-commerce y almacenes
de datos. La plataforma para Internet de Oracle incluye todo lo necesario para desarrollar, desplegar y
gestionar aplicaciones de Internet, incluidas estas tres partes fundamentales:

• Clientes basados en explorador para procesar la presentación


• Servidores de aplicaciones para ejecutar la lógica de negocio y servir la lógica de presentación para
clientes basados en explorador
• Bases de datos para ejecutar la lógica de negocio con uso intensivo de base de datos y servir datos.

Oracle ofrece una amplia variedad de las herramientas de desarrollo más avanzadas controladas por GUI
(interfaz gráfica de usuario) para crear aplicaciones de negocio, así como una gran serie de aplicaciones de
software para muchas áreas de negocio e industria. Oracle Developer Suite incluye herramientas para
desarrollar formularios e informes y para crear almacenes de datos. Las funciones, los paquetes y los
procedimientos almacenados se pueden escribir mediante SQL, PL/SQL o Java.
La versión Oracle10g contiene la base de datos para la grid. La idea básica de grid computing es la noción de
cálculo como un servicio, de forma análoga a la red eléctrica o a la red telefónica.

Como cliente de la red (grid), no se preocupa de dónde están los datos o de dónde se realiza el cálculo. Lo
que desea es que el cálculo se realice y que le entreguen la información cuando la necesite. Grid computing
puede reducir drásticamente el costo del cálculo, ampliar la disponibilidad de los recursos de cálculo y ofrecer
una productividad y una calidad más altas.

¿Qué significa: “Oracle Enterprise Manager 10g Grid Control?

Oracle Enterprise Manager 10g Grid Control es la consola completa, integrada y central y el marco
subyacente que automatiza las tareas administrativas entre juegos de sistemas en un entorno de grids.

Con Oracle Grid Control, puede agrupar varios nodos de hardware, bases de datos, servidores de
aplicaciones y otros destinos en entidades lógicas simples.

1.1 Introducción
1.1.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
1.1 Introducción
1.1.3 Descripción de Base de Datos

Una base de datos es una colección de datos relacionados. Por dato se entiende a un hecho conocido
que puede ser almacenado y que posee un significado implícito. Por ejemplo, considere los nombres,
números de teléfono y direcciones de un conjunto de personas almacenados en una libreta de
direcciones o en una computadora personal. Esto es una colección de datos relacionados con un
significado implícito, de esta forma, es una base de datos.

La definición precedente es genérica, sin embargo, el uso común del término base de datos es
usualmente más restringido. Una base de datos posee las siguientes propiedades implícitas:

• Una base de datos representa algún aspecto del mundo real, algunas veces denominado
universo de discurso o dominio de problema. Cambios en el dominio correspondiente son
reflejados en la base de datos.
• Una base de datos es una colección de datos lógica y coherente con un significado inherente.
Una recolección de datos aleatoria no es una base de datos.
• Una base de datos es diseñada, construida y cargada con datos para un propósito específico.
Existe un grupo de usuarios y un conjunto de aplicaciones preconcebidas en las cuales dichos
usuarios están interesados.
En resumen, una base de datos posee alguna fuente a partir de la cual se derivan los datos, algún grado
de interacción con el mundo real, y una audiencia que está activamente interesada en los contenidos de
la base de datos.

Un Sistema de Gestión de Base de Datos (DBMS – Database Management System) es una colección de
programas de software que permite crear y mantener una base de datos. De esta forma, el DBMS es un
sistema de software de propósito general que facilita el proceso de definir, construir y manipular bases de
datos para diferentes aplicaciones.

Definir una base de datos consiste de especificar los tipos de datos, estructuras y restricciones para los
datos que serán almacenados en la base de datos. Construir la base de datos es el proceso de
almacenar los datos propiamente dichos en un medio de almacenamiento controlado por el DBMS.
Manipular una base de datos incluye funciones tales como: consultar la base de datos para recuperar
datos específicos, actualizar la base de datos para reflejar cambios ocurridos en el mundo real, y generar
reportes a partir de los datos.

No es necesario utilizar un software DBMS de propósito general para implementar una base de datos
computarizada. Uno podría escribir su propio conjunto de programas para crear y mantener la base de
datos, en efecto, creando su propio software DBMS de propósito general. En cualquier caso, ya sea que
se utilice un DBMS de propósito general o no, usualmente se emplea una considerable cantidad de
software para manipular la base de datos. La base de datos propiamente dicha más el software DBMS
conforman un Sistema de Base de Datos -

Un DBMS proporciona un entorno conveniente y eficiente para ser utilizado al extraer y almacenar
información en la base de datos. Un sistema de bases de datos proporciona a los usuarios una vista
abstracta de los datos ocultando ciertos detalles de cómo se almacenan y mantienen los datos. Oracle
10g Server es un software DBMS de propósito general.

La Base de Datos Oracle 10g está diseñada para almacenar y gestionar información de empresa.
Permite reducir los costos de gestión y proporciona una alta calidad de servicio.

La reducción en los requisitos de configuración y de gestión y el ajuste SQL automático han


reducido de forma significativa el costo del mantenimiento del entorno.

La Base de Datos Oracle 10g forma parte de los productos de infraestructura de grid de la
versión Oracle 10g. "Grid computing" está relacionado con ver el cálculo como un servicio. Si es
un cliente, no necesita saber dónde residen los datos y qué computadora los almacena. Debería
ser capaz de solicitar información o cálculos de sus datos y que se los entreguen.

La Base de Datos Oracle 10g gestiona todos sus datos. No se trata simplemente de los datos
relacionales de objetos que se pueden esperar que gestione una base de datos de empresa.

También pueden ser datos no estructurados como:


• Hojas de cálculo
• Documentos de Word
• Presentaciones de PowerPoint
• XML
• Tipos de datos multimedia como MP3, gráficos, vídeo, etc.

Ni siquiera es necesario que los datos estén en la base de datos. Base de Datos Oracle 10g
dispone de servicios a través de los que puede almacenar metadatos sobre información
almacenada en los sistemas de archivos. Puede utilizar el servidor de bases de datos para
gestionar y servir información dondequiera que se encuentre.
1.1 Introducción
1.1.4 Descripción de Servidor de aplicaciones (IAS)

La arquitectura de bases de datos tradicional cliente/servidor está basada en un modelo de dos capas.
Este modelo consiste de una capa cliente y un servidor de bases de datos . El procesamiento de las
tareas y la lógica de aplicación son compartidos entre el servidor de bases de datos y el cliente.

Existen muchas desventajas para este modelo. Los clientes en un modelo de dos capas son clientes
gruesos, donde se encuentra la mayoría del procesamiento y lógica de aplicación. Esto produce un alto
costo de mantenimiento de los clientes. Además, los clientes pueden ser de diferentes plataformas, para
lo cual es necesario hacer el deployment (despliegue) de la aplicación para cada plataforma específica.
El modelo de tres capas resuelve los problemas del modelo de dos capas. En un modelo de tres capas,
existe una capa entre los clientes y el servidor de base de datos . Esta capa del medio es un servidor
de aplicación que contiene el grueso de la lógica de aplicación. Los clientes en este modelo son clientes
delgados. Con esta arquitectura, la lógica de aplicación está ubicada en una única capa lo cual facilita el
mantenimiento de la misma.

Oracle 10g Application Server es un servidor de aplicaciones confiable, escalable, seguro ubicado en la
capa del medio (middle-tier). Oracle 10g Application Server brinda una infraestructura que puede crecer
en base a las necesidades de la empresa u organización.

Oracle 10g Application Server posibilita a los usuarios implementar aplicaciones mediante una
arquitectura de múltiples capas (multitiered). La capa del medio (middle-tier) posee la lógica de la
aplicación enviando respuestas a las consultas realizadas por los clientes (normalmente navegadores
Web). Una tercera capa (tier) contiene a la base de datos, de esta manera el procesamiento de
transacciones en la misma puede ser optimizado.
Mediante los servicios que brinda Oracle 10g Application Server se puede dar soporte a las distintas
etapas que implica construir un e-business .
• Oracle Application Server 10g proporciona una plataforma completa de infraestructura para
desarrollar y desplegar aplicaciones de empresa, integrando muchas funciones, lo que incluye un
entorno de tiempo de ejecución de J2EE y de servicios Web, un portal de empresa, un broker de
integración de empresa, inteligencia de negocio, almacenamiento en caché Web y servicios de gestión
de identidad.
• Oracle Application Server 10g agrega nuevas funciones de grid computing, basándose en el éxito de
Oracle9i Application Server, que cuenta con cientos de clientes que utilizan sus aplicaciones de
empresa de producción.
• Oracle Application Server 10g es el único servidor de aplicaciones que incluye servicios para todas
las diferentes aplicaciones de servidores que pueda necesitar utilizar, como:

o Portales o direcciones Web


o Aplicaciones transaccionales Java
o Aplicaciones de inteligencia de negocio

También proporciona integración entre usuarios, aplicaciones y datos en toda la organización.

Oracle Corporation asegura la futura compatibilidad con los estándares en evolución al implicar de forma
activa a personal clave en los comités de normalización SQL. Los comités aceptados por la industria son
ANSI (Instituto Nacional Americano de Normalización) e ISO (Organización Internacional de
Normalización).
1.1 Introducción
1.1.5 Descripción de RDBMS y ORDBMS

Michael Stonebraker, en el paper "Object-Relational DBMS: The Next Wave," clasifica a las aplicaciones
de bases de datos en cuatro tipos: datos simples sin consulta, datos simples con consulta, datos
complejos sin consulta, y datos complejos con consultas. Estos cuatro tipos describen sistemas de
archivos, DBMSs relacionales, DBMS orientados a objeto, y DBMSs objeto relacionales,
respectivamente .
Una base de datos relacional está compuesta de muchas relaciones en la forma de tablas de dos
dimensiones compuestas por filas y columnas conteniendo tuplas (o registros) relacionadas. Los tipos de
consultas que atienden un sistema de gestión de base de datos relacional ( RDBMS ) varían desde
simples consultas incluyendo una única tabla de base a consultas complicadas de múltiples tablas
incluyendo uniones, anidamiento, diferencia o unión de conjuntos, y otras.

Oracle 10g Server es un RDBMS que implementa todas las características relacionales más
funcionalidades enriquecidas, como ser: commits rápidos, backup y recuperación, conectividad escalable,
bloque a nivel de filas, consistencia de lectura, particionamiento de tablas, paralelización de consultas,
bases de datos en cluster, exportación e importación de datos, entre otras.

La principal desventaja de bases de datos relacionales ocurre debido a su inhabilidad de manejar áreas
de aplicación como bases de datos espaciales (ej.: CAD), aplicaciones que manipulan imágenes, y otros
tipos de aplicaciones que incluyen la interrelación compleja de datos.

La ambición de representar objetos complejos ha provocado el desarrollo de sistemas orientados a objeto


incluyendo características de orientación a objeto, tales como: tipos de dato abstractos y encapsulamiento
(la estructura internad de los datos es ocultada y las operaciones externas pueden ser invocadas sobre el
objeto especificado), herencia (tendiendo a la reutilización de definiciones existentes para crear nuevos
objetos), etc. Una base de datos orientada a objetos emplea un modelo de datos que soporta
características de orientación a objeto y tipos de datos abstractos.

Bases de datos orientadas a objeto utilizan el poderío de los lenguajes de programación orientados a
objeto para proporcionar capacidades de programación de base de datos. Un sistema de gestión de base
datos orientado a objetos ( OODBMS ) implementa un modelo de objeto, estandarizado por ODMG
(Object Database Management Group), que consiste de tipos de dato, constructores de tipo, etc., similar
al modelo estándar para bases de datos relacionales.

La principal desventaja de ODBMS es la mala performance en la manipulación y acceso a datos. No


como en RDBMS, la optimización de consultas en OODBMS es altamente compleja. OODBMS también
sufren problemas de escalabilidad, y no son capaces de soportar sistemas de gran escala.

El principal objetivo de un ORDBMS es brindar los beneficios tanto del modelo relacional como del
modelo de objetos, tales como: escalabilidad y soporte de tipos de dato enriquecidos. ORDBMSs
emplean un modelo de datos que incorpora características de orientación a objeto en RDBMSs. Toda la
información es almacenada en tablas, pero algunas de las entradas tabulares en la base de datos pueden
poseer estructuras de datos enriquecidas o complejas (tipos de dato abstractos). Un ORDBMS soporta
una forma extendida de SQL. Las extensiones son necesarias debido a que ORDBMS dan soporte a tipos
de dato abstractos.

Oracle 10g Server es un ORDBMS, el mismo implementa un sistema de tipos objeto como una extensión
al modelo relacional. La interfase tipo objeto brindada por Oracle 10g Server continúa dando soporte a la
funcionalidad de base de datos relacional y, además, SQL y otras varias interfases de programación,
incluyendo PL/SQL, Java, OCI ( Oracle Call Interface), etc., han sido enriquecidas con nuevas
extensiones para dar soporte a objetos. El resultado es un modelo objeto relacional, el cual es intuitivo y
ofrece la riqueza de una interfase objeto, al mismo tiempo que preserva la concurrencia y el rendimiento
de una base de datos relacional .

Oracle Server soporta los modelos relacional y relacional de objetos. Oracle Server amplía las capacidades de
creación de modelos de datos para soportar una base de datos relacional de objetos que proporciona una
programación orientada a objetos, tipos de datos complejos, objetos de negocio complejos y compatibilidad plena
con el mundo relacional. Incluye diversas funciones para un rendimiento y una funcionalidad superiores de
aplicaciones OLTP (procesamiento de transacciones online), como un mejor uso compartido de estructuras de datos
de tiempo de ejecución, mayores cachés de buffer y restricciones diferibles.

Las aplicaciones de almacenes de datos se aprovechan de mejoras como la ejecución paralela de operaciones de
inserción, actualización y supresión; partición; y optimización de consultas compatible con ejecución paralela. Al
operar dentro del marco de NCA (arquitectura de cálculo de red), el modelo Oracle soporta las aplicaciones de
cliente/servidor y basadas en Web que se distribuyen y son de varias capas.

Para obtener más información sobre los modelos relacional y relacional de objetos, consulte el manual Database
Concepts.
Mediante SQL, se puede comunicar con Oracle Server. SQL tiene las siguientes ventajas:
• Eficaz.
• Fácil de aprender y utilizar.

• Completo funcionalmente (Con SQL, se pueden definir, recuperar y manipular datos de las
tablas.) .
1.1 Introducción
1.1.6 Tipos de datos que gestiona una BD Oracle

Oracle 10g Server gestiona todo tipo de datos, desde datos de empresa (datos que modelan entidades
del mundo real, o datos objeto) hasta datos semiestructurados y no estructurados. Como datos no
estructurados se clasifican a imágenes, videos, archivos de sonido, etc. La categoría de datos
semiestructurados abarca al mundo XML, donde se utiliza marcación de datos para dar cierto grado de
“estructura” o autodescribir a los datos en sí mismos. Tanto los datos no estructurados como los
semiestructurados pueden ser almacenados dentro de la base de datos o fuera de la misma. Oracle
10g Server provee servicios de base de datos para gestionar y servir datos almacenados fuera de la base
datos, ya sea disponibles a través de la web, almacenados en el sistema de archivos local o remoto, o en
cualquier otro medio de almacenamiento secundario.

Por otro lado, Oracle 10g Server soporta en su totalidad el modelado de datos de empresa, o datos
estructurados. Dentro de esta última clasificación se encuentra al conjunto de tipos de dato predefinidos
incluidos en la base de datos, y a los tipos objeto .

Cuando se crea una tabla para almacenar datos en la base de datos, es necesario especificar un tipo de
dato para cada una de las columnas definidas. Oracle 10g Server posee varios tipos de datos
predefinidos para satisfacer los requerimientos de una aplicación. Oracle 10g Server también soporta
tipos de dato ANSI y DB2. Los tipos de dato predefinidos en Oracle pueden ser clasificados de manera
genérica en caracteres, numéricos, long y raw, fecha y hora, objetos largos, y row ID. Los tipos de dato
predefinidos y su utilización son tratados más adelante .

Tipos objeto Oracle son tipos de datos definidos por el usuario que hacen posible modelar entidades
complejas del mundo real, tales como clientes y órdenes de compra, como entidades unitarias (“objetos”)
en la base de datos. Un tipo objeto es una clase de tipo de dato. Los mismos pueden utilizarse de la
misma manera en que se trata a los tipos de dato más familiares, como VARCHAR2 y NUMBER. Por
ejemplo, es posible definir un tipo objeto como el tipo de dato en una columna de una tabla relacional.

La tecnología de objetos que incluye Oracle 10g Server es un nivel de abstracción construido sobre
tecnología relacional Oracle. Nuevos tipos objeto pueden ser creados desde cualquier tipo de dato
predefinido o tipo objeto previamente definido. Los metadatos de los tipos definidos por el usuario son
almacenados en un esquema que se encuentra disponible para SQL, PL/SQL, Java, y otras interfases de
publicación.
1.1 Introducción
1.1.7 Modelo de Datos

Una característica fundamental de una base de datos es que la misma provee un nivel de abstracción de
datos ocultando detalles acerca del almacenamiento de datos que no son necesarios para la mayoría de
los usuarios de base de datos. Dicha abstracción es provista a través de un modelo de datos .

Un modelo de datos es una colección de conceptos que pueden ser utilizados para describir la estructura
de una base de datos. La estructura de una base de datos está conformada por los tipos de datos, las
relaciones entre los datos, y las restricciones que existen sobre los datos. La mayoría de los modelos de
datos también incluyen un conjunto de operaciones básicas para especificar recuperaciones y
actualizaciones realizadas sobre la base de datos.

EL objetivo es generar un modelo que se amolde a muchos de estos usos, resulte comprensible para el
usuario final y contenga suficientes detalles para que un desarrollador cree un sistema de base de datos.
1.1 Introducción
1.1.8 Categorías de Modelos de Datos

Los modelos de datos existentes pueden ser categorizados de acuerdo a los tipos de conceptos que
utilizan para describir la estructura de la base de datos.

• Modelos de datos conceptuales o de alto nivel: Proveen conceptos cercanos a la forma en que la
mayoría de los usuarios perciben los datos.
• Modelos de datos físicos o de bajo nivel: Proveen conceptos que describen cómo se almacenan
los datos en el medio de almacenamiento. Dichos conceptos generalmente son comprendidos y
manejados por usuarios administradores de base de datos, y no por usuarios finales.
• Modelos de datos representacionales o de implementación: Proveen conceptos que pueden ser
entendidos por usuarios finales pero y que a la vez son cercanos a la forma en que los datos
están organizados en la computadora. Dichos modelos ocultan algunos detalles acerca del
almacenamiento de datos pero pueden ser implementados en un sistema de computación de
forma directa.

Modelos de datos conceptuales utilizan conceptos tales como: entidades, atributos y relaciones. Modelos
de datos físicos representan información en la forma de formatos de registros, ordenamiento de registros,
y caminos de acceso. Un camino de acceso es una estructura que hace eficiente la búsqueda de
registros particulares en una base de datos.

Modelos de datos representacionales o de implementación son los modelos utilizados frecuentemente por
los DBMSs comerciales tradicionales, tales como: Oracle 10g Server . Esta categoría incluye a los
modelos de datos relacionales, ampliamente utilizados en la actualidad, y a los modelos de datos legados
o heredados utilizados en el pasado (modelo de datos de red y modelo de datos jerárquico) . Este tipo
de modelo representa datos utilizando estructuras de registros y, de esta forma, generalmente son
denominados modelos de datos basados en registros.
1.1 Introducción
1.1.9 El modelo Entidad – Relación

El modelo entidad relación (ER) es un modelo de datos conceptual de alto nivel. Este modelo, y sus
extensiones, frecuentemente es utilizado para el diseño conceptual de aplicaciones de base de datos, y
muchas herramientas de diseño de base de datos emplean sus conceptos.

El modelo ER datos como entidades, son relaciones entre entidades y atributos. El objeto básico que el
modelo ER representa es una entidad, la cual es una “cosa” del mundo real con existencia independiente.
Una entidad puede ser un objeto con existencia física (una persona determinada, un auto, una casa, un
empleado), o puede ser un objeto con una existencia conceptual (una compañía, un trabajo, un curso
universitario). Cada entidad posee atributos; propiedades de interés que describen a la entidad.
Por ejemplo, una entidad empleado puede ser descrita por su apellido y nombre, edad, dirección, salario
y tarea realizada. Una entidad particular poseerá un valor para cada uno de sus atributos . Los valores
de los atributos que describen cada entidad se tornan la mayor parte de los datos que son almacenados
en una base de datos.

Una base de datos normalmente contiene grupos de entidades que son similares. Por ejemplo, una
compañía que posee cientos de empleados puede desear almacenar información similar para cada uno
de sus empleados. Estas entidades “empleado” comparten el mismo conjunto de atributos, pero cada
entidad posee sus propios valores para cada atributo. Un tipo entidad define una colección (o conjunto)
de entidades que poseen los mismos atributos. Cada tipo entidad en la base de datos es descrita por su
nombre y atributos. La colección de todas las entidades de un tipo entidad particular en la base de datos
en un momento determinado es denominado conjunto de entidades, usualmente citado por el mismo
nombre del tipo entidad correspondiente .

Por ejemplo, EMPLEADO se refiere tanto a un tipo de entidad como al conjunto de todos los empleados
almacenados en la base de datos.

Una relación entre dos o más entidades representa una interacción entre las entidades. Existen varias
relaciones implícitas entre tipos entidad. Una relación existe cuando un atributo de un tipo entidad hace
referencia a otro tipo entidad. Por ejemplo, el atributo MANAGER del tipo entidad DEPARTMENT hace
referencia al empleado que gerencia el departamento en cuestión. Un tipo relación entre tipos entidad
define un conjunto de asociaciones (conjunto de relaciones) entre entidades de esos tipos . Como
ocurre con tipos entidad y conjuntos de entidades, un tipo relación y su correspondiente conjunto de
relaciones son citados por el mismo nombre. Informalmente, cada relación perteneciente al conjunto de
relaciones es una asociación de entidades, donde la asociación incluye una entidad de cada uno de los
tipos entidad participantes.

Dichas relaciones instancias representan el hecho que las entidades participantes están relacionadas en
alguna forma en el dominio de problema correspondiente. Por ejemplo, la relación WORKS_FOR entre
los tipo entidad EMPLOYEE y DEPARTMENT asocia cada empleado con el departamento en el cual el
mismo trabaja.
1.1 Introducción
1.1.10 El modelo de Datos Relacional

El modelo de datos relacional utiliza el concepto de relación matemática, la cual puede representarse
como una tabla de valores como su bloque de construcción básico.

Dicho modelo se basa en la teoría de conjuntos y la lógica de predicados de primer orden, y sus
principales características son la simplicidad y su fundamentación matemática. Oracle 10g Server es un
sistema de base de datos comercial que provee una implementación de este modelo - .

El modelo relacional representa la base de datos como una colección de relaciones, donde cada relación
se asemeja a una tabla de valores o archivo plano de registros.

Cuando una relación es pensada como una tabla de valores, cada fila en la tabla representa una
colección de valores de datos relacionados.

En el modelo de datos relacional, cada fila en la tabla representa un hecho que corresponde a una
entidad o relación en el mundo real. El nombre de la tabla y el nombre de las columnas son utilizados
para facilitar la interpretación del significado de los valores en cada fila de la tabla.

Por ejemplo, la tabla EMPLOYEE es denominada de esta manera ya que cada fila representa hechos
acerca de una entidad empleado en particular. Los nombres de columnas especifican cómo interpretar los
valores de datos en cada fila de acuerdo a la columna a la cual cada valor pertenece. Todos los valores
en una columna son del mismo tipo de dato.

En la terminología formal del modelo relacional, una fila es denominada una tupla, un encabezado de
columna es denominado un atributo, y una tabla es denominada una relación. El tipo de dato
describiendo los tipos de valores que pueden aparecer en cada columna es denominado dominio.
1.1 Introducción
1.1.11 Elementos que componen una Tabla

La terminología utilizada en el modelo relacional es la siguiente:

Tabla: La tabla es la estructura de almacenamiento básica en un Sistema de Administración de Base de


Datos Relacional (RDBMS).
Los datos de las tablas se almacenan en filas y columnas. Cada tabla se define con un nombre de tabla
que la identifica unívocamente y un conjunto de columnas. Una vez que se crea una tabla, se le pueden
insertar filas de datos válidos. Las filas de las tablas pueden ser consultadas, borradas o actualizadas.

Columna: Una columna representa un tipo de datos en una tabla (por ejemplo, el nombre del cliente en la
tabla Clientes). Una columna también puede ser referenciada como “atributo”. Cada columna tiene un
nombre de columna, un tipo de dato (tal como CHAR, DATE o NUMBER), y un ancho (que puede ser
predeterminado por el tipo de dato, como en el caso de DATE) o una escala y precisión (sólo para el tipo
de dato NUMBER).Todos los valores de una columna determinada tienen el mismo tipo de datos, y éstos
están extraídos de un conjunto de valores legales llamado el dominio de la columna. Las columnas de
una tabla están dispuestas en un orden específico de izquierda a derecha. Sin embargo, el orden de
éstas cuando se almacenan datos no es significativo, pero puede ser especificado cuando se los
recupera.

Fila: Una fila es una combinación de valores de columnas de una tabla (por ejemplo, la información
acerca de un cliente en la tabla Clientes). Una fila a menudo se denomina “tupla” o “registro”. Cada tabla
tiene cero o más filas, conteniendo cada una un único valor en cada columna. Las filas están
desordenadas; por defecto, los datos están dispuestos de acuerdo a cómo se insertaron.

Campo: Un campo se encuentra en la intersección de una fila y una columna. El campo puede contener
datos. Si no hay datos en el campo, se dice que contiene un valor nulo. Los valores de los campos no se
pueden descomponer en componentes más pequeños.

Clave primaria: Una clave primaria es una columna o conjunto de columnas que identifican
unívocamente cada fila de una tabla (por ejemplo, un número de cliente). Una tabla tiene una única clave
primaria y debe contener un valor.

Clave foránea: Una clave foránea es una columna o conjunto de columnas que se refieren a una clave
primaria de la misma tabla o de otra. Se crean estas claves para reforzar las reglas de diseño de la base
de datos relacional. Una tabla puede contener más de una clave foránea. Una combinación clave
primaria/clave foránea crea una relación padre/hijo entre las tablas que las contienen.
Las figuras y muestran gráficamente lo expresado anteriormente.
1.1 Introducción
1.1.12 El Lenguaje de Consulta Estructurada (SQL)

Diseñado e implementado originariamente por IBM, SQL (Structured Query Language) es actualmente el
lenguaje estándar para bases de datos relacionales comerciales. Esfuerzos de estandarización llevados a
cabo por ANSI (American National Standard Institute) e ISO (International Standards Organization) han
producido diferentes versiones estándar de SQL .

SQL es un lenguaje de base de datos integral ; el mismo posee sentencias para la definición, consulta y
actualización de datos. Adicionalmente, el mismo posee facilidades para definir vistas de base de datos,
especificar restricciones de seguridad y definir el acceso a datos, definir restricciones de integridad, y para
especificar el control de transacciones.

SQL utiliza los términos tabla, fila y columna para relación, tupla y atributo, respectivamente.

SQL es flexible y eficiente, con características que han sido diseñadas para la manipulación de datos
facilitando el acceso y la actualización de bases de datos relacionales. Por ejemplo, la siguiente sentencia
SQL borra de la base de datos todos los empleados que pertenecen al departamento numero 90:

DELETE FROM employees

WHERE department_id = 90;

SQL es un lenguaje de cuarta generación (declarativo), lo cual significa que una sentencia del lenguaje
describe lo que quiere realizarse, pero no en la manera en que debe llevarse a cabo. En la sentencia
DELETE mostrada anteriormente, por ejemplo, no es posible dilucidar de qué modo determinará la base de
datos cuáles son los empleados que pertenecen al departamento número 90 (empleados que se eliminarán
de la base de datos). Probablemente, el servidor Oracle recorrerá el conjunto de todos los empleados en un
cierto orden para determinar los elementos que deben borrarse, pero en ningún momento se explicita cómo
realizar dicha operación.

Todas las operaciones realizadas sobre la información en una base de datos Oracle son ejecutadas
utilizando sentencias SQL. Una sentencia SQL es una cadena de caracteres SQL. Sólo una sentencia SQL
completa puede ser ejecutada satisfactoriamente. Al ejecutarse un fragmento de sentencia se genera un
error indicando que se requiere más texto .
1.1 Introducción
1.1.13 Diferencias con PL/SQL

Teniendo en cuenta que SQL es un lenguaje de cuarta generación (4GL) y que los lenguajes de tercera
generación, como C y COBOL, son de naturaleza más procedimental. Un programa escrito en un
lenguaje de tercera generación (3GL) implementa un algoritmo paso a paso para resolver el problema .

Tanto los lenguajes 3GL como los 4GL tienen sus ventajas y desventajas. Los lenguajes 4GL como SQL
son, por regla general, bastante simples (comparados con los de 3GL) y tienen menos sentencias.
Asimismo, aíslan al usuario de los algoritmos y estructuras de datos subyacentes. En algunos casos, sin
embargo, las estructuras procedimentales disponibles en los lenguajes 3GL resultan útiles para expresar
un determinado programa. Y aquí es donde entra el PL/SQL, que combina la potencia y flexibilidad de un
lenguaje de SQL (un 4GL) con las estructuras procedimentales de un 3GL.

PL/SQL significa Procedural Language/SQL (Lenguaje Procedimental/SQL). Como su propio nombre


indica, PL/SQL amplía la funcionalidad de SQL añadiendo estructuras de las que pueden encontrarse en
otros lenguajes procedimentales, como:

• Variables y tipos (tanto predefinidos como definidos por el usuario)


• Estructuras de control, como bucles y órdenes IF-THEN-ELSE
• Procedimientos y funciones
• Tipos de objetos y métodos (en PL/SQL versión 8 o superior)

Las construcciones procedimentales están perfectamente integradas con Oracle SQL, lo que da como
resultado un lenguaje potente y estructurado, combinando la flexibilidad de SQL con la potencia y
configurabilidad de un 3GL. Por ejemplo si se quiere actualizar el salario del empleado número 250 y de
no existirse lo insertará como un nuevo empleado .

Trabajando con Oracle 10g Server, es posible extender la funcionalidad del lenguaje SQL a través de
funciones PL/SQL definidas por el usuario . Utilizando funciones PL/SQL en sentencias SQL es
posible:

• Incrementar la productividad brindada al usuario extendiendo el lenguaje SQL. Mejora la


expresividad del lenguaje SQL para tareas complejas o no posibles en SQL.
• Mejorar la eficiencia de consultas. Funciones utilizadas en la cláusula WHERE de una consulta
pueden filtrar datos utilizando criterios que, de otra forma, deberían ser evaluados por la
aplicación.
• Manipular cadenas de caracteres para representar tipos de datos especiales.
Por ejemplo: latitud, longitud, temperatura, etc.

• Proveer ejecución de consultas en paralelo.


Si la consulta es paralelizada, sentencias SQL en la función PL/SQL pueden también ser
ejecutadas en paralelo (utilizando la opción de consulta en paralelo).
1.1 Introducción
1.1.14 Tipos de sentencias SQL

Sentencias SQL se dividen en las siguientes categorías :

• Sentencias de Lenguaje de Definición de Datos (DDL – Data Definition Language): crean,


modifican y eliminan objetos de la base de datos (por ejemplo: CREATE, ALTER, DROP,
RENAME).
• Sentencias de Lenguaje de Manipulación de Datos (DML – Data Manipulation Language):
insertan, modifican, eliminan y consultan filas de tablas de la base de datos (INSERT, UPDATE,
DELETE, SELECT).
• Sentencias de Lenguaje de Control de Datos (DCL – Data Control Language): permiten dar o
restringir derechos de acceso a la base de datos y a objetos específicos dentro de la base de
datos (GRANT, REVOKE).
• Sentencias de Control de Transacciones: manejan los cambios hechos por los comandos del
lenguaje de manipulación de datos. Los cambios a los datos pueden ser agrupados en
transacciones lógicas (COMMIT, ROLLBACK, SAVEPOINT).
• Sentencias de Control de Sesión: permiten que un usuario controle las propiedades de la
sesión corriente, incluyendo la posibilidad de habilitar o deshabilitar roles, y cambiar la
configuración del lenguaje (ALTER SESSION, SET ROLE).
• Sentencias de Control de Sistema: cambian las propiedades de una instancia de Oracle 10g
Server. Permiten cambiar diferentes parámetros de configuración, tal como el número mínimo de
servidores compartidos, matar una sesión determinada y ejecutar otras tareas (ALTER SYSTEM,
ALTER SESSION, etc.).

• Sentencias de SQL embebido: permite la incorporación de sentencias DDL, DML y de control


de transacciones en un programa escrito en lenguaje procedural (OPEN, CLOSE, FETCH,
EXECUTE, etc.).
1.1 Introducción
1.1.15 Preguntas de Repaso sobre plataforma Oracle

Laboratorio 1.1.15

Preguntas de repaso sobre la


Plataforma Oracle

1.1 Introducción
1.1.16 AP: Modelado Entidad –
Relación

Laboratorio 1.1.16

Modelado Entidad - Relación

Modelado de datos. Diagrama


Entidad – Relación. Claves,
relaciones y cardinalidad de
datos.

Duración Estimada: 40 min.

1.1 Introducción
1.1.17 Síntesis
Oracle surge de la teoría de bases de datos relacionales, concebida por E. F. Codd en la década del
´50, y extiende tales conceptos en una amplia gama de direcciones, tales como: data warehousing,
procesamiento de transacciones en línea y soporte de aplicaciones web.
El desarrollo de software para la gestión de información ha transitado diferentes alternativas en los
últimos años.

Primeramente, el software que se utilizó para el almacenamiento y la recuperación de datos se basó en


sistemas de archivos como medio de almacenamiento. Dicha solución requiere que el programador de
aplicaciones defina cómo se almacena y cómo se recupera la información, utilizando un lenguaje de
programación, tal como COBOL.

Luego surgieron las bases de datos en red y las bases de datos jerárquicas, tecnología que quedó en
desuso debido a su incapacidad de base para brindar eficiencia y flexibilidad al gestionar grandes
volúmenes de información.

Como cuarto paradigma de base de datos, basado en una teoría matemática formalizada, aparecen las
bases de datos relacionales; paradigma que ganó rápidamente el mercado de gestión de datos y que
evolucionó brindando acceso a datos rápido, flexible y seguro.

Debido a su fuerte basamento matemático, la tecnología relacional permitió, y continúa permitiendo, el


desarrollo de mecanismos de optimización que se utilizan tanto en el acceso a datos como en la
actualización de los mismos.

Sin duda, el auge de las bases de datos relacionales se debe a la adopción de un lenguaje estándar
universal, SQL, lo que brinda ventajas de integración, estandarización y eficiencia, a la vez que posibilita
el acceso a datos de manera rápida y sencilla.

Oracle 10g Server provee muchas características útiles y poderosas, muchas de las cuales están
incorporadas al nivel de SQL. Además, Oracle 10g Server posee un lenguaje procedural interno a la
base de datos que posibilita la extensión de SQL.

Este tema abordó conceptos de bases de datos relacionales y objeto relacionales, introdujo el lenguaje
de consulta estructurado estándar SQL, señaló las diferencias que este último posee para con un
lenguaje procedural (como PL/SQL), y profundizó en los modelos de datos.
2 Bloque de consulta básico

En una base de datos relacional los datos son almacenados en estructuras de almacenamiento o tablas. Las dos
operaciones básicas a llevar a cabo sobre una base de datos relacional son la recuperación o el acceso a los
datos almacenados, y el almacenamiento en sí o actualización de datos, ya sea: inserción, eliminación o
modificación de datos. En una base de datos relacional, tanto para la recuperación de datos como para la
actualización de los mismos, se utiliza el lenguaje SQL.

La sentencia del lenguaje utilizada para la recuperación de datos a partir de la base de datos es la sentencia
SELECT. SQL posee diversos operadores que pueden ser utilizados al escribir una consulta SQL, o SELECT. La
sentencia SELECT, además, posee cláusulas que permiten restringir y ordenar el conjunto resultado, lo que
permite presentar el resultado de una consulta según el formato requerido por el usuario final de la base de
datos. SQL también provee la facilidad de invocar funciones, programas que reciben argumentos y calculan o
retornan un valor en la sentencia SELECT. La invocación de funciones brinda mayor flexibilidad y potencia al
lenguaje, a la vez que provee un mecanismo de extensión.

Los datos en una base de datos relacional se almacenan en diferentes tablas, y dichas tablas se encuentran
relacionadas por valores en común. Utilizando la sentencia SELECT, es posible escribir consultas que unen dos
o más tablas relacionadas y presentan la información de manera unificada.

Además del acceso a datos almacenados en diferentes tablas, en SQL es posible agregar o agrupar datos
según valores comunes, lo que permite calcular valores sumarizados a nivel de grupo de filas. La sentencia
SELECT posee una cláusula para especificar el agrupamiento de datos, y existen diferentes funciones de grupo
para llevar a cabo cálculos a nivel de grupo.

Esta lección trata también el entorno iSQL*Plus, en el que se pueden ejecutar sentencias SQL.

2.1 Escritura de sentencias SQL SELECT Básicas

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al


Material del Estudiante (Kit).
2.1 Escritura de sentencias SQL SELECT Básicas
2.1.1 Objetivos
En esta sub-unidad se presenta la sentencia SELECT del lenguaje de consulta estructurado SQL en su forma
más primitiva, abordando también los operadores aritméticos, de concatenación y conceptos complementarios
aplicables a dicha sentencia.

2.1 Escritura de sentencias SQL SELECT Básicas


2.1.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
2.1 Escritura de sentencias SQL SELECT Básicas
2.1.3 Descripción de la Sentencia SELECT

La herramienta fundamental de SQL es la sentencia SELECT, que permite seleccionar registros desde
las tablas de la base de datos, devolviendo aquellos que cumplan las condiciones establecidas y
pudiendo presentar el resultado en el orden deseado .

Capacidades de las Sentencias SELECT de SQL

• Proyección: Seleccione las columnas de una tabla que se ha devuelto mediante una consulta.
• Selección: Seleccione las filas de una tabla que se han devuelto mediante una consulta.

• Unión: Junte datos almacenados en diferentes tablas especificando el enlace que hay entre ellos .
2.1 Escritura de sentencias SQL SELECT Básicas
2.1.4 Sintaxis de la Sentencia SELECT

En la figura se muestra la sintaxis completa de la sentencia SELECT.

La sentencia SELECT permite recuperar de las tablas todas o un subconjunto de columnas especificadas
por el usuario. Si se escribe * , se seleccionarán todas las columnas. Si se desea seleccionar sólo
algunas columnas de la tabla, se deben indicar los nombres de cada una de ellas, separadas por una
coma .

En su forma básica, una sentencia SELCT debe contener:

• Una cláusula SELECT.

• Una cláusiula FROM, que identifica la tabla que contiene las columnas que se muestran en la
cláusula SELECT.
2.1 Escritura de sentencias SQL SELECT Básicas
2.1.5 Escrituras de Sentencias SQL
A continuación se detallan algunas reglas para crear sentencias válidas, fáciles de interpretar

• Las sentencias SQL no son sensibles a mayúsculas/minúsculas. (a menos que se indique que lo
sean).
• Las sentencias SQL se pueden introducir en una o en varias líneas.
• Las palabras clave no se pueden dividir en líneas ni se pueden abreviar.
• Las cláusulas se suelen colocar en líneas aparte para facilitar su lectura y su edición.
• Se deben utilizar sangrados para facilitar la lectura del código.

• Las palabras clave se suelen introducir en mayúsculas; el resto de palabras, como nombres y
columnas, se introduce en minúsculas.

2.1 Escritura de sentencias SQL SELECT Básicas


2.1.6 Utilidad de alias

El alias de columna renombra un encabezamiento de columna. Se especifica después de la columna en


la lista SELECT con un espacio en blanco de separación . Por defecto, los encabezamieros alias
aparecerán en mayúsculas.

Si el alias contiene espacios, caracteres especiales (como # o $) o es sensible a mayúsculas y


minúsculas, se debe encerrar el alias entre comillas dobles (“ ”) .

Se puede incluir la palabra clave AS delante del alias con el fin de cumplir con el estándar ANSI SQL 92.
2.1 Escritura de sentencias SQL SELECT Básicas
2.1.7 Operadores aritméticos

Una expresión aritmética puede contener nombres de columnas, valores numéricos constantes y
operadores aritméticos.

Se pueden usar los operadores aritméticos en cualquier sentencia de SQL excepto en la cláusula
FROM.
Precedencia de Operadores
• La multiplicación y la división tienen prioridad sobre la suma y la resta.
• Los operadores de la misma prioridad se evalúan de izquierda a derecha.

• Los paréntesis pueden ser usados para cambiar la prioridad de evaluación y para clarificar las
sentencias
2.1 Escritura de sentencias SQL SELECT Básicas
2.1.8 Operador de concatenación

El operador de concatenación está representado por dos barras verticales ( || ). Se utiliza para vincular
columnas con otras columnas, expresiones aritméticas o valores constantes. Como resultado de la
concatenación se obtiene una columna que es una expresión de tipo caracter.

Cadenas de Literales

Un literal es un caracter, un número o una fecha que se ha incluido en la lista SELECT. Se imprime con cada
fila devuelta.

Los literales de fecha y de caracteres deben ir entre comillas simples (' '); los literales de números no es
necesario que vayan entre comillas.

Operador de Comillas (q) Alternativo

El operador (q) se utiliza para seleccionar un delimitador propio.


2.1 Escritura de sentencias SQL SELECT Básicas
2.1.9 La palabra clave DISTINCT

A menos que se especifique de otra manera, SQL*Plus o ISQL*Plus muestran los resultados de una consulta
sin eliminar las filas duplicadas.

Para eliminar las filas duplicadas en el resultado, se debe incluir la palabra clave DISTINCT en la cláusula
SELECT inmediatamente después del comando.
DISTINCT se aplica a todas las columnas de la lista de la cláusula SELECT.
Si hay varias columnas en la cláusula SELECT, el resultado de aplicar DISTINCT representa las diferentes
combinaciones de las columnas.

2.1 Escritura de sentencias SQL SELECT Básicas


2.1.10 El valor NULO

Si una fila carece de un valor para una columna en particular, se dice que contiene un “null”.

NULL es un valor inaccesible, sin valor, desconocido o inaplicable. No representa ni un cero ni un


espacio en blanco. El cero es un número y el espacio es un carácter.

Las columnas de cualquier tipo de datos pueden contener valores nulos, a menos que hayan sido
definidas como NOT NULL o como clave primaria (PRIMARY KEY) cuando se creó la tabla.

Todos los operadores (exceptuando el de concatenación) retornan NULL cuando se les da un operando
nulo.
Valores Nulos en Expresiones Aritméticas
Si en una expresión, cualquier valor de una columna es nulo, el resultado también lo es. Por ejemplo, si
se intenta ejecutar una división por cero, se obtendrá un error. Sin embargo, si se divide por un valor
nulo, el resultado es nulo.
2.1 Escritura de sentencias SQL SELECT Básicas
2.1.11 Interacción de SQL e iSQL*Plus
SQL es un lenguaje de comandos para la comunicación con Oracle Server desde cualquier herramienta o
aplicación. Oracle SQL contiene muchas extensiones.

iSQL*Plus es una herramienta de Oracle que reconoce y envía sentencias SQL a Oracle Server para su
ejecución y contiene su propio lenguaje de comandos.

Funciones de SQL

• Lo pueden utilizar diferentes usuarios, incluidos los que tengan poca o ninguna experiencia en
programación
• Es un lenguaje no procedural
• Es un lenguaje basado en el inglés

Funciones de iSQL*Plus

• Se accede a él desde un explorador


• Acepta sentencias SQL
• Proporciona edición online para modificar sentencias SQL
• Controla los valores de entorno
• Formatea los resultados de las consultas en informes básicos
• Accede a bases de datos locales y remotas

Sentencias SQL frente a Comandos de iSQL*Plus

SQL:
• Un lenguaje
• Estándar ANSI
• Las palabras clave no se pueden abreviar
• Las sentencias manipulan datos y definiciones de tablas en la base de datos

iSQL*Plus
• Un entorno
• Propietario de Oracle
• Las palabras clave se pueden abreviar
• Los comandos no permiten la manipulación de valores en la base de datos
• Se ejecuta en un explorador

• Se carga centralmente; no es necesaria su implementación en cada máquina


2.1 Escritura de sentencias SQL SELECT Básicas
2.1.12 Visión General de iSQL*Plus
Conexión a iSQL*Plus

Para conectarse desde un entorno de explorador:

1. Inicie el explorador.
2. Introduzca la dirección URL del entorno iSQL*Plus.
3. En la página Login, introduzca valores adecuados en los campos Username, Password y Connect
Identifier.

Entorno iSQL*Plus

En el explorador, la página iSQL*Plus Workspace tiene varias áreas clave:

1. Cuadro de texto: Área en la que se escriben las sentencias SQL y los comandos de iSQL*Plus
2. Botón Execute: Haga clic en este botón para ejecutar las sentencias y los comandos del cuadro de
texto
3. Botón Load Script: Abre un formulario en el que puede identificar una ruta de acceso y un nombre de
archivo o una dirección URL que contiene comandos de SQL, PL/SQL o L*Plus para cargarlos en el
cuadro de texto
4. Botón Save Script: Guarda el contenido del cuadro de texto en un archivo
5. Botón Cancel: Detiene la ejecución del comando del cuadro de texto
6. Botón Clear Screen: Haga clic en este botón para limpiar el texto del cuadro de texto
7. Icono Logout: Haga clic en este icono para dar por terminada la sesión de iSQL*Plus y volver a la
página iSQL*Plus Login
8. Icono Preferences: Haga clic en este icono para cambiar la configuración de la interfaz, la
configuración del sistema o la contraseña
9. Icono Help: Proporciona acceso a la documentación de ayuda de iSQL*Plus

Visualización de la Estructura de Tablas

El comando DESCRIBE muestra la estructura de una tabla .


Interacción con Archivos de Comandos

Puede guardar comandos y sentencias desde el cuadro de texto en iSQL*Plus a un archivo de comandos de
texto del modo siguiente:

1. Escriba la sentencia SQL en el cuadro de texto en iSQL*Plus.


2. Haga clic en el botón Save Script. Se abrirá el recuadro de diálogo Windows File Save. Identifique el
nombre del archivo. La extensión por defecto será .uix. Puede cambiar el tipo de archivo a un archivo
de texto o guardarlo como archivo .sql. .

Puede recuperar un scripts guardado como .sql

Haga clic en el botón Load Script. Se abrirá un formulario desde el que puede escribir el nombre del archivo o
una dirección URL que contenga los comandos de SQL, PL/SQL o SQL*Plus que desee introducir en el cuadro
de texto.
2.1 Escritura de sentencias SQL SELECT Básicas
2.1.13 AP: Utilización de la sentencia SELECT

Laboratorio 2.1.13

Utilización de la sentencia SELECT

Utilización de la sentencia SELECT


mediante operadores aritméticos y de
concatenación. Aplicación de alias de
columnas y eliminación de filas
duplicadas.

Duración Estimada: 40 min.

2.1 Escritura de sentencias SQL SELECT Básicas


2.1.14 AI: Selección de campos en la consulta

Teniendo en cuenta la tabla base JOBS donde se encuentran los distintos cargos que puede ocupar un
empleado de la empresa, arrastre la/s opción/es hasta la posición correcta que crea necesaria/s para
completar la sentencia SELECT y así obtener el resultado que se muestra a continuación.

Teniendo en cuenta la tabla base LOCATIONS donde se encuentran las direcciones de los departamentos de
la empresa, seleccione la/s sentencias SELECT que considere correcta/s para obtener el resultado que se
muestra a continuación. .

2.1 Escritura de sentencias SQL SELECT Básicas


2.1.15 AI: Utilización de DISTINCT

Teniendo en cuenta la tabla base EMPLOYEES donde se encuentran los datos de todos los empleados
de la empresa, seleccione la sentencia SELECT que considere correcta para obtener el resultado que se
muestra a continuación.
2.1 Escritura de sentencias SQL SELECT Básicas
2.1.16 Síntesis
Datos almacenados en una base de datos Oracle 10g son gestionados y accesados utilizando SQL. Una
sentencia SELECT es utilizada para consultar datos a partir de una tabla o vista.

En este tema se abordaron fundamentos de SQL, incluyendo tipos de dato y operadores. Los tipos de
dato CHAR y VARCHAR2 son utilizados para almacenar información alfanumérica. El tipo de dato
NUMBER es utilizado para almacenar valores numéricos. Valores tipo fecha pueden ser almacenados
utilizando el tipo de dato DATE.

Oracle 10g Server posee una amplia gama de operadores: aritméticos, de concatenación, de conjuntos,
de comparación, de inclusión, lógicos, de comparación de patrones, de rangos, y de verificación de
existencia y nulidad.

2.2 Restricción y ordenamiento de datos

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo
en cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al


Material del Estudiante (Kit).
2.2 Restricción y ordenamiento de datos
2.2.1 Objetivos
En este tema se verá cómo, a través de sentencias SQL, es posible limitar la información recuperada
especificando criterios, y cómo visualizar los resultados en un orden específico. Para restringir el conjunto
resultado se utilizan condiciones de comparación o condiciones lógicas.

2.2 Restricción y ordenamiento de datos


2.2.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
2.2 Restricción y ordenamiento de datos
2.2.3 Descripción de la cláusula WHERE

Se pueden restringir las filas recuperadas usando la cláusula WHERE. Una cláusula WHERE contiene
una condición lógica, la cual usa operadores de comparación. Las filas procesadas son aquellas en que
los datos que contienen satisfacen la/s condición/es lógicas.
2.2 Restricción y ordenamiento de datos
2.2.4 Sintaxis de la cláusula WHERE

En la figura se muestra la sintaxis de la sentencia SELECT con la cláusula WHERE, la cual se ubica
a continuación de la cláusula FROM.

Se pueden usar nombres de columnas o expresiones en la cláusula WHERE, pero no alias de columnas.
No es necesario incluir los nombres de columnas en la cláusula SELECT para poder usarlos en la
cláusula WHERE.

2.2 Restricción y ordenamiento de datos


2.2.5 Condiciones de comparación

Los operadores de comparación se emplean en la cláusula WHERE para comparar una expresión con
otra. El resultado de la comparación puede ser TRUE, FALSE, o UNKNOWN. En la figura se muestra
la sintaxis del uso de operadores dentro de la cláusula WHERE, en la figura - se listan los
operadores de comparación y se presentan ejemplos.

A menudo es más fácil encontrar las filas que no cumplen una condición, que aquellas que sí lo hacen.
La negación de algunos operadores se muestra en la figura .

Operador LIKE

No siempre se conoce el valor exacto a buscar. Se pueden seleccionar filas que coincidan con un patrón
de caracteres usando el operador LIKE. La operación de coincidencia se conoce como una búsqueda
que incluye comodines. Se pueden utilizar dos símbolos para construir la búsqueda:

% : Representa cualquier secuencia de cero o más caracteres


_ : Denota un solo caracter

Cuando se necesita una coincidencia exacta para los comodines “%” y “_”, se usa la opción ESCAPE.
Dicha opción especifica cuál es el caracter ESCAPE.

El operador LIKE se puede usar como una abreviatura para algunas comparaciones BETWEEN. .

Operadores IS NULL e IS NOT NULL

Los operadores IS NULL e IS NOT NULL testean valores que son nulos. Si se comparan valores nulos
usando los otros operadores (=, >, etc.) el resultado será siempre FALSO porque un valor nulo no puede
ser igual, mayor, distinto, etc. a otro valor.
2.2 Restricción y ordenamiento de datos
2.2.6 Condiciones lógicas

Un operador lógico combina los resultados de dos condiciones para producir un único resultado basado
en ellos, o invertir el resultado de una condición. La tabla siguiente lista los operadores lógicos.

Consultas de Datos con Condiciones Múltiples


Se pueden especificar criterios complejos combinando varias condiciones. Los operadores AND y OR se
pueden usar para componer expresiones lógicas.

El operador AND retorna VERDADERO si ambas condiciones evaluadas son VERDADERAS, mientras
que el operador OR retorna VERDADERO si alguna de las condiciones es VERDADERA.

En los ejemplos de la figura y , las condiciones son las mismas pero el operador es distinto. El
resultado obtenido en cada caso será muy diferente.
2.2 Restricción y ordenamiento de datos
2.2.7 Descripción de la cláusula ORDER BY

El orden de las filas recuperadas por el resultado de una consulta es indefinido. Oracle 10g Server no
puede buscar y traer las filas en el mismo orden para una consulta ejecutada dos veces. La cláusula
ORDER BY puede ser utilizada para ordenar las filas. Si se usa, se ubica como la última cláusula en el
comando SELECT. Se puede usar un alias de columna en la cláusula ORDER BY.

Ordenamiento de los Datos por Defecto

El orden por defecto es ascendente:


• Los valores numéricos se muestran con el valor más bajo en primer lugar, por ejemplo 1 a 999.
• Los valores de fecha se muestran con el valor más temprano en primer lugar, por ejemplo 01-01-
1992 antes que 01-01-1995.
• Los valores de caracteres se muestran en orden alfabético, por ejemplo primero la A y último la Z.
• En Oracle 10g, los valores nulos se muestran últimos en las secuencias ascendentes y primeros
en las secuencias descendentes.

Si no se utiliza la cláusula ORDER BY, el orden no se define y Oracle Server puede no recuperar las filas en el
mismo orden para la misma consulta dos veces. Utilice la cláusula ORDER BY para mostrar las filas en un
orden específico.
2.2 Restricción y ordenamiento de datos
2.2.8 Sintaxis de la cláusula ORDER BY

En la figura se muestra la sintaxis de la sentencia SELECT con la cláusula ORDER BY.

Es posible utilizar esta sentencia para presentar los datos de una tabla de diferentes maneras en cuanto
al orden en que se muestran sus filas.

Para invertir el orden de recuperación de las filas, se especifica el comando DESC después del nombre
de la columna en la cláusula ORDER BY.

Otro método para ordenar el resultado de una consulta es por posición. Dicho método es útil
específicamente cuando se ordena por una expresión larga. En vez de tipearla nuevamente, se puede
especificar su posición en la lista SELECT.

Se puede ordenar el resultado de una consulta por más de una columna. El límite es la cantidad de
columnas de la tabla. En la cláusula ORDER BY se especifican los nombres de las columnas separados
por comas . Si se desea invertir el orden de una columna, se especifica DESC después de su nombre
o posición.

IMPORTANTE : Se puede ordenar por columnas que no se encuentran en la lista SELECT.


2.2 Restricción y ordenamiento de datos
2.2.9 Reglas de precedencia

Se pueden combinar los operadores AND y OR en la misma expresión lógica. Los resultados de todas
las condiciones se combinan en el orden determinado por la precedencia de los operadores conectores.
Cuando los operadores tienen igual precedencia, se ejecutan de izquierda a derecha. En la figura se
indican los niveles de precedencia entre los operadores.

Cuando se usa negación de expresiones, los operadores de comparación también se evalúan primero.

Para modificar las reglas de precedencia se deben utilizar paréntesis. Cada vez que se presenten dudas
acerca de qué operación será ejecutada primero al evaluar una expresión, se debe usar paréntesis para
clarificar la sentencia.

Con iSQL*Plus, puede crear informes que pidan a los usuarios que suministren sus propios valores para
restringir el rango de datos devueltos por variables de sustitución.
Una variable se puede considerar un contenedor en el que los valores se almacenan temporalmente. Al
ejecutarse la sentencia, el valor se sustituye.

Al ejecutar un informe, los usuarios a menudo desean restringir los datos que se devuelven
dinámicamente. iSQL*Plus suministra esta flexibilidad con variables de usuario.

Uso del Comando DEFINE

En iSQL*Plus, puede utilizar las variables de sustitución ampersand simple (&) para almacenar valores
temporalmente.
Puede predefinir variables mediante el comando DEFINE de iSQL*Plus. DEFINE crea y asigna un valor a
una variable.

iSQL*Plus almacena el valor que se suministra mediante el comando DEFINE; lo vuelve a utilizar siempre
que se haga referencia al nombre de variable.

2.2 Restricción y ordenamiento de datos


2.2.10 AP: Utilización del BETWEEN, IN, LIKE y NULL

Laboratorio 2.2.10

Utilización de BETWEEN, IN,


LIKE y NULL.

Restricción de filas recuperadas


y ordenamineto de los resultados
mostrados.

Duración Estimada: 30 min.

2.2 Restricción y ordenamiento de datos


2.2.11 AI: Restricciones AND, OR, NOT

Arrastre la/s opción/es hasta la posición correcta que crea necesaria/s para completar la sentencia

SELECT que muestre el código de departamento, el nombre donde el código de ubicación sea igual a

1700 y que tengan un director en dicho departamento, ordenando el resultado en forma descendente

por el código de departamento.

Arrastre la/s opción/es hasta la posición correcta que crea necesaria/s para completar la sentencia

SELECT que muestre el apellido, nombre y cargo que ocupan los empleados que pertenecen al

departamento 90 o los que estén a cargo del director cuyo código es igual a 124 o 205, ordenando el

resultado por el apellido.


2.2 Restricción y ordenamiento de datos
2.2.12 AI: Utilización de BETWEEN

Teniendo en cuenta las columnas mostradas de la tabla base EMPLOYEES donde se encuentran los
datos de todos los empleados de la empresa, seleccione la/s fila/s que se obtendrían como resultado al
ejecutarse la siguiente sentencia SELECT.
2.2 Restricción y ordenamiento de datos
2.2.13 Síntesis
En una sentencia SELECT, es posible limitar las filas seleccionadas utilizando una cláusula WHERE y
ordenar los datos recuperados utilizando una cláusula ORDER BY. En este tema se abordaron estas
cláusulas, así como también condiciones de comparación y condiciones lógicas. Utilizando operadores es
posible escribir condiciones para restringir el resultado de una consulta SQL.
2.3 Funciones de una sola fila

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al Material


del Estudiante (Kit).
2.3 Funciones de una sola fila
2.3.1 Objetivos
Funciones son programas que toman cero o más argumentos y retornan un valor único. Oracle 10g ha
desarrollado un número de funciones en SQL, las cuales pueden ser invocadas en sentencias SQL.
Existen cinco clases de funciones significativas: funciones de una sola fila, funciones de agregación
(también denominadas funciones de grupo), funciones analíticas, funciones de referencia a objetos, y
funciones definidas por el usuario. Este punto focaliza el primer grupo de funciones: funciones de una sola
fila.

Funciones de una sola fila operan sobre expresiones derivadas de columnas o literales, y las mismas son
ejecutadas una vez por cada fila recuperada. Este tema cubre cuáles funciones de una sola fila se
encuentran disponibles y las reglas que gobiernan el uso de las mismas.

2.3 Funciones de una sola fila


2.3.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
2.3 Funciones de una sola fila
2.3.3 ¿Qué es una función SQL predefinida?

Las funciones en una BD Oracle 10g pueden clasificarse, en forma genérica, en:

• Funciones SQL: Las funciones SQL son funciones predefinidas en Oracle 10g y están
disponibles para su utilización en distintas sentencias SQL.
• Funciones Definidas por el Usuario (UDFs): Las funciones definidas por el usuario sirven para
proveer funcionalidad que no está disponible en SQL o en funciones predefinidas SQL. Las
mismas pueden ser escritas en PL/SQL o en Java.

Las funciones predefinidas SQL pueden agruparse según el tipo de dato de sus argumentos y sus
valores de retorno. De esta clasificación surgen los siguientes grupos de funciones:

• Funciones de una sola fila


• Funciones de grupo (o de varias filas)
• Funciones analíticas

• Funciones de referencia a objetos

2.3 Funciones de una sola fila


2.3.4 Conversión Implícita
Oracle 10g soporta conversión implícita y explícita de valores de un tipo de dato a otro. Es recomendado
especificar conversiones explícitas en vez de confiar en conversiones automáticas o implícitas, por las
siguientes razones:

• Las sentencias SQL son más fáciles de entender cuando se utilizan funciones de conversión de
tipos de dato.
• La conversión de tipo de dato automática puede tener un impacto negativo en performance.
• Las conversiones implícitas dependen del contexto en el cual las mismas ocurren y pueden no
funcionar de la misma forma en todos los casos.
• El comportamiento de una conversión explícita es más predecible. Los algoritmos de conversión
implícita están sujetos a modificaciones en diferentes versiones de software.

Oracle 10g automáticamente convierte un valor de un tipo de dato a otro cuando dicha conversión tiene
sentido. Por Ej.: si se invoca a una función SQL con un argumento de un tipo de dato diferente al tipo de
dato esperado por la misma, Oracle 10g implícitamente convierte el argumento al tipo de dato esperado
antes de ejecutar la función SQL - .

Existen reglas que gobiernan el momento y la dirección en la cual Oracle 10g Server realiza conversiones
de tipos de dato implícitas .
2.3 Funciones de una sola fila
2.3.5 Conversión Explícita

Es posible especificar explícitamente una conversión de tipo de dato utilizando funciones de conversión
SQL.
Una función de conversión convierte un valor de un tipo de dato a otro. Generalmente, la nomenclatura
de este tipo de funciones sigue el formato: “tipo_de_dato TO tipo_de_dato”. El primer tipo de dato es el
tipo de dato de entrada, mientras que el segundo es el tipo de dato de salida .

La tabla muestra funciones SQL que explícitamente convierten un valor de un tipo de dato a otro .

2.3 Funciones de una sola fila


2.3.6 Argumentos de entrada

Las funciones pueden recibir información de entrada a través de una lista de argumentos.
Una función de una sola fila puede requerir cero o más argumentos dependiendo del tipo de operación
que ésta realice. Un argumento es un valor o una expresión de un tipo de dato específico que la función
utiliza para realizar la operación y retornar un único resultado.

Los argumentos deben ser pasados entre paréntesis a la función en el momento que ésta es invocada y
delimitados por comas en caso requerir más de un argumento. La lista de argumentos puede estar
integrada por variables, expresiones y/o constantes.

Es necesario respetar el orden y tipo de dato de los argumentos según se especifique en la sintaxis de la
función utilizada.
En caso que una función reciba como argumento un valor o resultado de una expresión cuyo tipo de dato
sea diferente al que realmente espera, Oracle 10g Server realizará la conversión implícita siempre y
cuando ésta sea válida. De lo contrario, se producirá un error.

Anidamiento de Funciones

Las funciones de una sola fila se pueden anidar hasta cualquier nivel. Las funciones anidadas se
evalúan desde el nivel más interno al más externo.

Fun 3 (Fun2 (Fun1 (col, argum1) , argum2), argum3)


2.3 Funciones de una sola fila
2.3.7 Funciones de caracteres

Las funciones de caracteres que retornan valores del mismo tipo de dato que el argumento de entrada.
Las funciones de caracteres que retornan valores numéricos pueden tomar como argumento cualquier
tipo de dato caracter .

Límite en valores caracteres retornados:

• Funciones que retornan valores CHAR están limitadas en longitud a 2000 bytes.
• Funciones que retornan valores VARCHAR2 están limitadas en longitud a 4000 bytes.
• Funciones que retornan valores CLOB están limitadas a 4 GB.
Reglas en el tratamiento de los límites:

• Para funciones de tipo CHAR y VARCHAR2, si la longitud del valor de retorno excede el límite,
Oracle Server trunca el valor y retorna el resultado sin un mensaje de error.

Para funciones CLOB, si la longitud del valor de retorno excede el límite, Oracle Server dispara un error y
no retorna datos.

Funciones de Manejo de Mayusculas y Minusculas

LOWER: Convertir cadenas de caracteres a minusculas.

UPPER: Convertir cadenas de caracteres a mayusculas.

INITCAP: Convierte la primera letra de una cadena a mayusculas y el resto en minusculas.


2.3 Funciones de una sola fila
2.3.8 Funciones numéricas

La mayoría de estas funciones retornan valores representados por dígitos con precisión de 38 decimales.
Las funciones COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN y TANH trabajan con precisión de 36
dígitos decimales. Las funciones ACOS, ASIN, ATAN y ATAN2 trabajan con precisión de 30 dígitos
decimales.

En la figura se muestra un listado exhaustivo de las funciones numéricas existentes en Oracle


10g Server.
2.3 Funciones de una sola fila
2.3.9 Funciones para trabajar con datos NULOS

Si una columna en una fila no posee valor, se dice que la columna es nula o contiene el valor nulo (null).
Valores nulos pueden aparecer en columnas de cualquier tipo de dato que no posean restricciones de
integridad NOT NULL o PRIMARY KEY. Utilice un nulo cuando el valor actual no es conocido o cuando
dicho valor no es significativo.

No utilice nulo para representar un valor cero, debido a que los mismos no son equivalentes.
Actualmente, Oracle 10g Server trata un valor caracter con longitud cero como nulo, sin embargo, esto
puede no continuar siendo verdadero en futuras versiones del producto. De esta forma, Oracle
10g recomienda no tratar cadenas de caracteres vacías como nulos. Toda expresión aritmética
conteniendo un nulo, siempre evalúa a nulo. Por ejemplo, 10 sumado a null da como resultado null. De
hecho, todos los operadores (excepto concatenación) retornan null cuando existe un operando nulo.

Funciones para trabajar con datos nulos

Todas las funciones escalares (excepto REPLACE, NVL y CONCAT) retornan null cuando reciben un
argumento nulo. Es posible utilizar la función NVL para retornar un valor en la ocurrencia de un nulo. Por
ejemplo, la expresión NVL(COMM,0) retorna cero si COMM es nulo, o el valor de COMM si éste es no
nulo.

La función NVL2 evalua la primera expresión. Si la primera expresión no es nula, la función NVL2 retorna
la segunda expresión. Si la primera expresión es nula, se retorna la tercera expresión. NVL2(expre1,
expre2, expre3)

La función NULLIF sirve para compara dos expresiones. Si son iguales, la función retorna un valor nulo.
Si son diferentes, la función retorna la primera expresion. No se puede usar el literal NULL para la
primera expresión.

La función COALESCE devuelve la primera expresión no nula de la lista.

La mayoría de las funciones de agregación ignoran los valores nulos. Por ejemplo, considere una
consulta que promedia los siguientes cinco valores: 1000, null, null, null, y 2000. Dicha consulta ignora los
nulos y calcula el promedio como:

(1000+2000)/2 = 1500

Nulos en condiciones de comparación

Para verificar la existencia de valores nulos debe utilizarse únicamente las condiciones de comparación
IS NULL y IS NOT NULL. Si se utiliza cualquier otra condición con nulos y el resultado depende del valor
nulo, el resultado es desconocido (UNKNOWN). Debido a que el valor nulo representa ausencia de datos,
un nulo no puede ser igual ni distinto de algún otro valor o de otro nulo.

Sin embargo, Oracle 10g Server considera dos nulos como iguales cuando se evalúa una función
DECODE.

Oracle 10g Server también considera dos valores nulos como iguales si los mismos aparecen en claves
compuestas. Esto es, Oracle 10g Server considera idénticas dos claves compuestas que contengan
nulos si todos los componentes no nulos de las claves son iguales.

Nulos en condiciones

Una condición que evalúa a UNKNOWN actúa similar a FALSE. Por ejemplo, una sentencia SELECT con
una condición en la cláusula WHERE que evalúa a UNKNOWN no retorna filas. No obstante, una
condición que evalúa a UNKNOWN difiere de FALSE en que operaciones posteriores realizadas sobre la
condición UNKNOWN darán como resultado UNKNOWN. Esto es, NOT FALSE evalúa a TRUE, pero
NOT UNKNOWN evalúa a UNKNOWN.

La figura muestra algunos ejemplos de evaluaciones considerando valores nulos.


2.3 Funciones de una sola fila
2.3.10 Funciones de fechas

Las funciones de fecha operan sobre valores de tipo DATE (fecha/hora). Todas las funciones de fecha
retornan un valor o un intervalo de valores de tipo DATE, excepto la función MONTHS_BETWEEN, la
cual retorna un valor numérico. La figura muestra las funciones de fecha presentes en Oracle 10g
Server.

SYSDATE

La función SYSDATE retorna la fecha y hora corriente. El tipo de dato del valor retornado es DATE. La
función no requiere argumentos. En sentencias SQL distribuidas, esta función retorna la fecha y
hora de la base de datos local .

SYSTIMESTAMP

La función SYSTIMESTAMP retorna la fecha del sistema, incluyendo fracciones de segundos y la zona
horaria del sistema en el cual la base de datos reside. El tipo de retorno es TIMESTAMP WITH TIME
ZONE - .

Elemento de Formato de Fecha RR

El formato de fecha RR es similar al elemento YY, pero se puede usar para especificar siglos diferentes.
Utilice el elemento de formato RR en lugar de YY para que el siglo del valor de retorno varíe según el año
de dos dígitos especificado y los dos dígitos del año actual.
2.3 Funciones de una sola fila
2.3.11 Modelos de formatos
Un modelo de formato es un literal caracter que describe el formato de datos DATE o NUMBER
almacenados en una cadena de caracteres (o string). Cuando se convierte una cadena de caracteres a
fecha o número, un modelo de formato especifica cómo Oracle 10g Server interpreta dicha cadena .
Cabe destacar que un modelo de formato no modifica la representación interna del valor almacenado en
la base de datos.

En sentencias SQL, es posible utilizar un modelo de formato como argumento en las funciones
TO_CHAR y TO_DATE:
• Para especificar el formato que Oracle 10g Server utiliza para retornar un valor desde la base de
datos
• Para especificar el formato de un valor de forma que Oracle 10g Server pueda almacenarlo
correctamente en la base de datos
Los valores de algunos formatos están determinados por el valor de ciertos parámetros de inicialización.
Para tales formatos, es posible especificar los caracteres retornados por estos elementos de formato
implícitamente utilizando el parámetro de inicialización NLS_TERRITORY. Es posible modificar el formato
de fecha por defecto para una sesión a través de la sentencia ALTER SESSION.

Todos los modelos de formato numéricos causan que el número en cuestión sea redondeado al
número de dígitos significativos especificado en el modelo. Si un valor posee más dígitos significativos a
la izquierda del punto decimal de los que son especificados en el formato, el símbolo numeral ( # )
reemplaza el valor. Si un valor positivo es extremadamente largo y no puede ser representado en el
formato especificado, el símbolo tilde ( ~ ) reemplaza el valor (notar que el tilde representa el valor
infinito). De la misma forma, si un número negativo es extremadamente pequeño y no puede ser
representado en el formato especificado, el símbolo infinito negativo reemplaza el valor ( - ~ ). Esta
situación normalmente ocurre cuando se está utilizando la función TO_CHAR con un modelo de formato
numérico restrictivo, lo que provoca una operación de redondeo .

La longitud total de un modelo de formato fecha no puede exceder los 22 caracteres. El formato de fecha
por defecto es especificado, ya sea, explícitamente con el parámetro de inicialización
NLS_DATE_FORMAT, o implícitamente con el parámetro de inicialización NLS_TERRITORY. Es posible
modificar el formato de fecha por defecto en una sesión a través de la sentencia ALTER SESSION .
2.3 Funciones de una sola fila
2.3.12 Función CASE

Las expresiones CASE pueden clasificarse en dos tipos generales: expresiones sencillas y expresiones
de múltiples condiciones.
La sintaxis mostrada en [SQL 3-54] corresponde a expresiones CASE sencillas. En este tipo de
expresiones la condición implícita utilizada es la igualdad (=).
A través de las expresiones CASE de múltiples condiciones puede utilizarse una combinación de
condiciones. La sintaxis se muestra en la figura .

En este tipo de expresiones, Oracle 10g Server busca de izquierda a derecha la primera ocurrencia de
condición que sea verdadera, y devuelve return_expr. Si ninguna de las condiciones (condition) es
verdadera y existe una cláusula ELSE, Oracle 10g Server devuelve else_expr. En caso contrario, Oracle
10g Server devuelve un valor nulo.

El número máximo de argumentos en una expresión CASE es de 255, y cada par WHEN...THEN cuenta
como dos argumentos. Para evitar exceder el límite de 128 posibilidades, es posible anidar expresiones
CASE. Esto es, return_expr puede ser en sí misma una expresión CASE.

2.3 Funciones de una sola fila


2.3.13 Función DECODE

Si expr y search contienen datos caracter, Oracle 10g Server los compara utilizando semántica de
comparación sin completar con espacios en blanco. expr, search y result pueden ser de cualquiera de los
tipos CHAR, VARCHAR2, NCHAR o NVARCHAR2. La cadena de caracteres retornada es de tipo
VARCHAR2. Los valores search, result y default pueden ser derivados de expresiones. Oracle
10g Server evalúa cada valor search únicamente antes de compararlo a expr. Como consecuencia,
nunca se evalúa un valor search si un valor search previo es igual a expr .

Oracle 10g Server automáticamente convierte el valor expr y cada valor search al tipo de dato del primer
valor search antes de realizar la comparación. Oracle 10g Server automáticamente convierte el valor de
retorno al tipo de dato del primer valor result. Si el primer valor result posee tipo de dato CHAR o es nulo,
se convierte el valor de retorno al tipo de dato VARCHAR2.

En una función DECODE, Oracle 10g Server considera dos valores nulos como equivalentes. Si expr es
nulo, se retorna el valor result del primer search que también es nulo. DECODE no necesariamente debe
retornar un valor; la función puede retornar nulo .

El número máximo de componentes en la función DECODE, incluyendo expr, searches, results y default,
es 255.
2.3 Funciones de una sola fila
2.3.14 AP: Manipulación de NULOS

Laboratorio 2.3.14

Manipulación de NULOS

Aplicar las funciones de una fila


para el manejo de valores nulos.

Duración Estimada: 20 min.

2.3 Funciones de una sola fila


2.3.15 AI: Argumentos de entrada y
respuesta de la Función

Analice cada invocación de función y realice los siguientes


ejercicios interactivos.
• En base a la invocación y los argumentos de
entrada recibidos, una con flechas la invocación
correspondiente al valor retornado .
• En base a la invocación y los argumentos de
entrada recibidos, complete el valor retornado por la
función .

• En base a la invocación y los argumentos de entrada


recibidos, una con flechas la invocación
correspondiente al tipo de dato retornado .
2.3 Funciones de una sola fila
2.3.16 AI: Conversión de datos

Lea con atención la sintaxis de invocación de funciones y considerando el conjunto de posibles


resultados, una con flechas según corresponda.

2.3 Funciones de una sola fila


2.3.17 Síntesis
Este tema introdujo funciones de una sola fila. Se ilustró que las funciones de una sola fila retornan un
valor para cada fila al momento en que la misma es recuperada desde la tabla o vista de base.

Funciones de una sola fila pueden ser utilizadas en sentencias SELECT en las cláusulas SELECT,
WHERE y ORDER BY. Este tema cubrió la variedad de funciones disponibles para cada tipo de dato y
algunas funciones que trabajan sobre cualquier tipo de dato.
2.4 Visualización de datos de varias tablas

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al


Material del Estudiante (Kit).
2.4 Visualización de datos de varias tablas
2.4.1 Objetivos
Una base de datos posee muchas tablas donde se almacenan datos. En el tema “2.1 Escritura de
sentencias SQL SELECT básicas” se vio cómo escribir consultas simples que seleccionan datos de una
única tabla. La potencialidad primaria de bases de datos relacionales es la capacidad de unir dos o más
tablas relacionadas y acceder a información. Utilizando la sentencia SELECT, es posible escribir
consultas avanzadas que satisfacen requerimientos de usuario.

Este tema focaliza la atención en la consulta a datos a partir de más de una tabla utilizando uniones de
tabla Oracle 10g Sever ha enriquecido las capacidades al realizar uniones en conformidad al estándar
ANSI/ISO SQL1999. Dicho tema abarca la funcionalidad de los varios tipos de uniones existentes, y
ejercita la sintaxis apropiada en cada caso.

2.4 Visualización de datos de varias tablas


2.4.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
2.4 Visualización de datos de varias tablas
2.4.3 Descripción de claves ajenas (Foreign Key)

Una clave primaria no puede contener valores nulos. Esto es debido a que los valores de clave primaria
son utilizados para identificar filas de manera unívoca en una tabla; si existieran valores de clave primaria
nulos implica que no sería posible identificar algunas filas de la tabla. Dicho de otra forma, si dos o más
filas de la tabla poseen valores nulos en su clave primaria, no sería posible distinguirlas. Este tipo de
restricción de clave, o restricción de integridad sobre una relación, es impuesto sobre una o más
columnas de una tabla individual.

Por otro lado, restricciones de clave especificadas sobre dos tablas son utilizadas para mantener la
consistencia entre filas de ambas tablas. Informalmente, una restricción de integridad referencial
asevera que una fila en una tabla haciendo referencia a otra tabla debe referenciar a una fila existente en
la tabla destino. Por ejemplo, la columna DEPARTMENT_ID de la tabla EMPLOYEES proporciona el
número de departamento en el cual trabaja cada empleado; esto es, su valor en cada fila de la tabla
empleado debe coincidir con el valor de la columna DEPARTMENT_ID de alguna de las filas en la tabla
DEPARTMENTS.

Una restricción de integridad referencial se establece a través de una clave foránea . En el ejemplo
citado, la columna DEPARTMENT_ID en la tabla EMPLOYEES es una clave foránea y referencia a la
tabla DEPARTMENTS, ya que sus valores (en EMPLOYEES) se corresponden a valores de clave
primaria en la tabla DEPARTMENTS. Una clave foránea puede contener valores nulos, lo que implica que
la fila correspondiente no posee una fila relacionada en la tabla destino.

Una clave foránea puede hacer referencia a la misma tabla, estableciendo una autorelación. Por ejemplo,
la columna MANAGER_ID de la tabla EMLPOYEES establece una autorelación entre empleados. Para un
empleado determinado, la clave foránea MANAGER_ID referencia a otra fila en la misma tabla
EMPLOYEES que corresponde al empleado director del empleado en cuestión .
2.4 Visualización de datos de varias tablas
2.4.4 Unión de tablas – La condición WHERE

Para consultar datos a partir de más de una tabla, es necesario identificar columnas comunes que
establezcan una relación entre las tablas. En la cláusula WHERE, se define la relación entre las tablas
que aparecen en la cláusula FROM utilizando operadores de comparación. Dicha relación puede ser
especificada utilizando una cláusula JOIN en vez de la cláusula WHERE. La cláusula JOIN es una
característica nueva en Oracle 10g Server, adicionada para satisfacer el estándar ISO/ANSI SQL1999.
Una consulta de múltiples tablas sin una relación de este tipo es conocida como producto cartesiano o
unión cruzada (cross join).

El operador más común utilizado para relacionar dos tablas en el operador de igualdad (=). Se denomina
unión de igualdad si se relacionan dos tablas utilizando el operador de igualdad. La unión de igualdad
también es denominada unión simple, unión interna o equijoin. Este tipo de unión combina filas de dos
tablas que poseen valores equivalentes para las columnas especificadas, y retorna únicamente las filas
que satisfacen la condición de igualdad .

Cuando la cláusula FROM incluye más de dos tablas, Oracle 10g Server sigue un algoritmo de unión
tomando conjuntos de dos tablas por vez .
2.4 Visualización de datos de varias tablas
2.4.5 Condiciones adicionales a la unión de tablas

Además de especificar la condición de unión en la cláusula WHERE, es posible especificar otras


condiciones para limitar las filas recuperadas. Tales uniones son denominadas uniones complejas .
2.4 Visualización de datos de varias tablas
2.4.6 Ambigüedad de columnas

Si múltiples tablas poseen los mismos nombres de columna, los nombres de columna duplicados deben
ser cualificados en la consulta con el nombre de tabla o alias correspondiente (excepto cuando se utiliza
sintaxis ANSI SQL). La cualificación de nombres de columna evita ambigüedad e incrementa la legibilidad
de la consulta - .

Usar el prefijo de tabla mejora el rendimiento de la consulta. Al realizar uniones con la cláusula USING,
no puede cualificar una columna que se use en la propia cláusula USING.
2.4 Visualización de datos de varias tablas
2.4.7 Utilización de Alias de las tablas

De la misma forma que para las columnas, las tablas también pueden tener alias. El nombre alias de la
tabla se especifica al lado de la tabla, separado con un espacio. Los alias de tabla incrementan la
legibilidad de la consulta. Los mismos también pueden ser utilizados para acortar los nombres de tabla
largos con nombres alias reducidos en tamaño.

Cuando tablas (o vistas) son especificadas en la cláusula FROM, Oracle 10g Server busca los objetos en
el esquema (o usuario) conectado actualmente a la base de datos. Si la tabla pertenece a otro esquema,
es necesario cualificar el nombre de tabla con el nombre del esquema correspondiente (esto puede
evitarse utilizando sinónimos, los cuales serán tratados más adelante).

Reglas de cualificación:

• Es posible utilizar el nombre del propietario (o esquema) para cualificar un nombre de tabla.
• Es posible utilizar el nombre de tabla o el nombre de tabla y el esquema para cualificar una
columna - .
• Es posible cualificar un nombre de columna con su esquema y tabla únicamente cuando el
nombre de tabla ha sido cualificado con el esquema correspondiente.

Cuando se utilizan nombres de alias de tabla, deben cualificarse los nombres de columna con el alias
únicamente; cualificar las columnas con el nombre de tabla producirá un error .
2.4 Visualización de datos de varias tablas
2.4.8 Uniones de NO igualdad

Si la consulta relaciona dos tablas utilizando un operador de igualdad (=), la misma es una unión de
igualdad, también denominada unión interna o equijoin. Si se utiliza cualquier otro operador para
relacionar las tablas en la consulta, la misma es denominada unión de no igualdad.

Se pueden utilizar otras condiciones (como <= y >=), pero BETWEEN es la más sencilla. Recuerde
especificar el valor bajo en primer lugar y el alto al final cuando
utilice BETWEEN.
2.4 Visualización de datos de varias tablas
2.4.9 Uniones Externas

Una unión interna retorna sólo las filas coincidentes de ambas tablas. A veces, es necesario visualizar los
datos de una tabla aún si no existe la fila correspondiente en la tabla relacionada. Para realizar
esto, Oracle 10g Server provee un mecanismo denominado unión externa.

La unión externa retorna resultados basada en al condición de unión interna, así como también en las
filas no coincidentes de una o ambas tablas.

En la sintaxis Oracle 10g tradicional, el símbolo más encerrado entre paréntesis, (+), denota una unión
externa en la consulta. Escriba (+) al lado del nombre de columna de la tabla donde puede no existir una
fila correspondiente. Por ejemplo, para escribir una consulta que ejecute una unión externa de las tablas
A y B y retorne todas las filas de A, se aplica el operador de unión externa (+) a todas las columnas de B
en la condición de unión. Para todas las filas en A que no posean filas coincidentes en B, la consulta
retorna valores nulos para las columnas de B. Dicho de otra manera, el operador de unión externa (+) va
del lado de la relación donde se completa con valores nulos. Por ejemplo, para listar el país (de la tabla
COUNTRIES) y la ciudad (de la tabla LOCATIONS), mostrando todos los países que pertenecen a la
tabla COUNTRIES sin importar si poseen o no ciudades relacionadas en la tabla LOCATIONS. Para
ejecutar esta unión externa, se utiliza un operador de unión externa junto a todas las columnas de la tabla
LOCATIONS en la cláusula WHERE .

El operador de unión externa (+) puede aparecer únicamente en la cláusula WHERE de una sentencia
SELECT. Si existen múltiples condiciones de unión entre las tablas, el operador de unión externa debe
ser utilizado en todas ellas - .

Una unión externa, conteniendo el operador (+), no puede ser combinada con otra condición utilizando los
operadores OR o IN - .
2.4 Visualización de datos de varias tablas
2.4.10 Sintaxis en Uniones Externas

Una unión externa izquierda es una unión entre dos tablas que retorna filas basada en la condición de
comparación, así también como filas no coincidentes de la tabla que aparece del lado izquierdo en la
cláusula FROM (o JOIN en sintaxis ANSI). Por ejemplo, si se combinan las tablas A y B (FROM A, B), y
se desea visualizar todas las filas de A, el operador de unión externa es ubicado junto a todas las
columnas de B. Esto es una unión externa izquierda. Notar el orden en que aparecen las tablas en la
cláusula FROM .

Una unión externa derecha es una unión entre dos tablas que retorna filas basada en la condición de
comparación, así también como filas no coincidentes de la tabla que aparece del lado derecho en la
cláusula FROM (o JOIN en sintaxis ANSI) .

Cabe resaltar que una consulta incluyendo una unión externa de tablas puede ser escrita tanto por
izquierda como por derecha .

Una unión externa completa (o full) es una unión entre dos tablas que retorna filas basada en la
condición de comparación, así también como filas no coincidentes de la tabla del lado izquierdo y filas no
coincidentes de la tabla del lado derecho de la cláusula JOIN ( sintaxis ANSI). Por ejemplo, suponer que
se desea listar todos los apellidos de los empleados con sus nombres de departamento. Se desea incluir
en el listado a todos los empleados, aún si los mismos no poseen un departamento asignado. Y también
se desea incluir en el listado a todos los departamentos, aún si no existen empleados trabajando en dicho
departamento. Una unión externa completa resuelve este requerimiento .

Unir tablas con las cláusulas NATURAL JOIN, USING u ON da como resultado una unión interna. Las
filas sin correspondencias no se muestran en la salida. Para devolver las filas sin correspondencias,
puede utilizar una unión externa. Una unión externa devuelve todas las filas que satisfacen la condición
de unión y devuelve también algunas o todas las filas de una tabla para las que ninguna fila de la otra
tabla satisface la condición de unión.
Hay tres tipos de uniones externas:
• LEFT OUTER
• RIGHT OUTER
• FULL OUTER

Con NATURAL JOIN puede unir tablas automáticamente basándose en columnas de las dos tablas que
tengan tipos de datos y nombres correspondientes.

Se puede utilizar la cláusula USING para especificar únicamente las columnas que se deben utilizar para
una unión igualitaria. Las columnas a las que se hace referencia en la cláusula USING no deben tener
cualificador (nombre de tabla o alias) en ninguna parte de la sentencia SQL.

Utilice la cláusula ON para especificar una condición de unión. Esto le permite especificar condiciones de
unión aparte de cualquier condición de búsqueda o de filtro en la
cláusula WHERE.

En sintaxis Oracle 10g, una consulta de unión externa completa no puede escribirse en forma directa
utilizando el operador de unión externa (+) . Una forma de escribir una consulta de unión externa
completa en sintaxis Oracle 10g es a través del operador UNION .
2.4 Visualización de datos de varias tablas
2.4.11 Unión de una misma tabla

Una autounión combina una tabla a sí misma. El nombre de la tabla aparece dos veces en la cláusula
FROM, con diferentes nombres de alias obligatoriamente. Los dos alias son tratados como dos tablas
diferentes, y las mismas se combinan de la misma forma que cualquier conjunto de otras tablas, a través
de columnas en común .

Cuando se ejecuta una autounión en sintaxis ANSI, siempre debe utilizarse la sintaxis JOIN...ON. Los
tipos de unión NATURAL, y JOIN...USING no pueden ser utilizados .

La cláusula ON también se puede utilizar para unir columnas con nombres diferentes, dentro de la misma
tabla o en una tabla diferente.
2.4 Visualización de datos de varias tablas
2.4.12 Creación de Uniones en Tres Sentidos con Cláusula
ON

Uniones en Tres Sentidos

Es una unión de tres tablas. En la sintaxis es compatible con SQL:1999, las uniones se realizan de
izquierda a derecha. De esta forma, la primera unión que se debe realizar segunda condición de unión
puede hacer referencia a columnas de las tres tablas.es EMPLOYEES JOIN DEPARTMENTS. La primera
condición de unión puede hacer referencia a columnas de EMPLOYEES y DEPARTMENTS pero no
puede hacer referencia a columnas de LOCATIONS. La segunda condición de unión puede hacer
referencia a columnas de las tres tablas. .
2.4 Visualización de datos de varias tablas
2.4.13 Productos Cartesianos

Cuando una condición de unión no es válida o se omite por completo, el resultado es un producto
cartesiano, en el que se muestran todas las combinaciones de filas.

Un producto cartesiano generar gran cantidad de filas y resultados no utiles. Debería incluir siempre una
condición de unión válida a menos que tenga la necesidad específica de combinar todas las filas de
todas las tablas. .

2.4 Visualización de datos de varias tablas


2.4.14 Uniones Cruzadas

La clausula CROSS JOIN produce el producto combinado o cartesiano entre dos tablas.
2.4 Visualización de datos de varias tablas
2.4.15 AP: Uniones de dos tablas

Laboratorio 2.4.15

Uniones de dos tablas.


Mostrar datos de dos tablas mediante
el uso de uniones de igualdad y
uniones externas.
Duración Estimada: 40 min.

2.4 Visualización de datos de varias tablas


2.4.16 AP: Uniones de más de dos
tablas

Laboratorio 2.4.16

Uniones de más de dos tablas.


Mostrar datos de más de dos tablas
mediante es uso de uniones de
igualdad, autouniones y uniones
externas.
Duración Estimada: 40 min.

2.4 Visualización de datos de varias tablas


2.4.17 AI: Importancia de las
claves ajenas

Diga si las siguientes afirmaciones son verdaderas o falsas


en base al gráfico presentado conjuntamente.
2.4 Visualización de datos de varias tablas
2.4.18 Síntesis
Uniones son utilizadas para relacionar dos o más tablas (o vistas). Trabajando con una base de datos
relacional, es común resolver un requerimiento que involucre la unión de datos. Las tablas son unidas (o
relacionadas) utilizando una columna en común entre ambas tablas en la cláusula WHERE de la
consulta. Oracle 10g Server soporta la sintaxis de unión ANSI/ISO SQL1999. En dicha sintaxis, las tablas
son unidas utilizando la palabra clave JOIN y una condición que pude ser especificada utilizando la
cláusula ON.

Si la condición de unión utiliza el operador de igualdad (= o IN), la unión es denominada unión de


igualdad. Si se utiliza cualquier otro operador para unir las tablas, la unión es denominada unión de no
igualdad. Si no se especifica ninguna condición de unión entre las tablas, el resultado será un producto
cartesiano: cada fila de la primera tabla es unida a cada fila de la segunda tabla. Para evitar un producto
cartesiano, deben existir al menos n-1 condiciones de unión en la cláusula WHERE cuando existen n
tablas en la cláusula FROM. Una tabla puede ser unida a sí misma, este tipo de unión es denominado
autounión.
Si se desea seleccionar los resultados a partir de una tabla, aún si no existen las filas correspondientes
en la tabla unida, se debe utilizar el operador de outer join: (+). En la sintaxis ANSI, es posible utilizar las
palabras clave; NATURAL, JOIN, CROSS JOIN, LEFT JOIN, RIGHT JOIN, y FULL JOIN para especificar
el tipo de unión a realizar.

2.5 Agregado de datos utilizando funciones de grupo

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al


Material del Estudiante (Kit).
2.5 Agregado de datos utilizando funciones de grupo
2.5.1 Objetivos
Como ya ha sido introducido anteriormente, las funciones son programas que reciben cero o más
argumentos y retornan un valor único. Este tema abarca funciones de agregación, las cuales también son
denominadas funciones de grupo.

Funciones de grupo se diferencian de funciones de una sola fila en cómo las mismas son evaluadas.
Funciones de una sola fila son evaluadas una vez por cada recuperada. Funciones de grupo son
evaluadas sobre grupos de una o más filas a la vez.

Este tema considera cuáles funciones de grupo están disponibles en SQL y las reglas sobre cómo
utilizarlas. Juntamente a estos conceptos, se explora la invocación a funciones de anidamiento. SQL
posibilita el anidamiento de funciones de grupo en la invocación a funciones de una sola fila, y el
anidamiento de funciones de una sola fila en la invocación a funciones de grupo.

2.5 Agregado de datos utilizando funciones de grupo


2.5.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
2.5 Agregado de datos utilizando funciones de grupo
2.5.3 Descripción de las funciones de grupo

En contraste con las funciones a nivel de fila, las funciones de grupo operan sobre conjuntos de filas para
devolver un resultado por cada uno de ellos. Dichos grupos pueden estar constituidos por la tabla entera
o por partes de la misma.
Cada una de las funciones de grupo acepta un argumento. Algunas de las funciones de grupo
disponibles se muestran en la figura .

Muchas opciones de grupo aceptan estas opciones:

• DISTINCT: esta opción causa que una función de grupo considere sólo valores distintos de
una expresión argumento.
• ALL: esta opción causa que una función de grupo considere todos los valores incluyendo
todos los duplicados.

Por ejemplo, el promedio DISTINCT de 1, 1, 1, y 3 es 2; el promedio ALL es 1,5. Si no se especifica una


opción, se asume por defecto ALL.

Todas las funciones de grupo, excepto COUNT(*), ignoran los valores nulos. Se puede usar la función
NVL en el argumento de una función de grupo para sustituir un valor nulo por otro valor.

Si una consulta con una función de grupo no retorna filas, o sólo retorna filas con valores nulos para el
argumento de la función, la función de grupo retorna nulo.

2.5 Agregado de datos utilizando funciones de grupo


2.5.4 Sintaxis de las funciones de grupo

En la figura se muestra la sintaxis de las funciones de grupo y en la figura se muestran tres


ejemplos de la utilización de las funciones de grupo.
2.5 Agregado de datos utilizando funciones de grupo
2.5.5 La cláusula GROUP BY

Si se usa la cláusula GROUP BY en una sentencia SELECT, Oracle 10g Server divide las filas de una
tabla o vista consultada en grupos. Oracle 10g Server aplica las funciones de grupo en la lista SELECT a
cada grupo de filas y retorna una única fila resultado para cada grupo. Si se omite la cláusula GROUP
BY, Oracle 10g Server aplica las funciones de grupo en la lista SELECT a todas las filas en la tabla o
vista consultada.

Guía

• En una consulta que contiene una cláusula GROUP BY, todos los elementos de la lista SELECT
deben ser expresiones de la cláusula GROUP BY, expresiones que contienen funciones de grupo
o constantes. Si hay fallas en la inclusión de columna, aparecerá un mensaje de error.
• Con el uso de la cláusula WHERE se pueden excluir filas antes de la división en grupos.
• No se puede usar la notación de posición o el alias de columna en la cláusula GROUP BY.
• Por defecto, las filas se ordenan en forma ascendente de acuerdo a la lista GROUP BY.
Esto se puede modificar haciendo uso de la cláusula ORDER BY.
En la figura se muestran ejemplos de la utilización de la cláusula GROUP BY.
2.5 Agregado de datos utilizando funciones de grupo
2.5.6 Agrupación por más de una columna

Se pueden devolver resultados resumen para grupos y subgrupos incluyendo más de una columna en la
cláusula GROUP BY. El orden en el cual se listan las columnas en la cláusula GROUP BY determina la
forma de ordenamiento por defecto.

2.5 Agregado de datos utilizando funciones de grupo


2.5.7 La cláusula HAVING

La cláusula HAVING se usa para restringir cuáles grupos de filas, definidas por la cláusula GROUP BY,
son retornadas por la consulta. Oracle 10g Server procesa las cláusulas WHERE, GROUP BY y HAVING
de la siguiente manera:
Se deben especificar las cláusulas GROUP BY y HAVING después de la cláusula WHERE. Si se
especifican ambas cláusulas (GROUP BY y HAVING), ellas pueden aparecer en cualquier orden.

Las funciones de grupo pueden aparecer en la lista de la cláusula SELECT y en la cláusula HAVING.

En la figura se muestran ejemplos de la utilización de la cláusula HAVING.

1. Si la sentencia contiene una cláusula WHERE, Oracle 10g Server remueve todas las filas que no
la satisfacen.
2. Oracle 10g Server calcula y da formato a los grupos como se especifica en la cláusula GROUP
BY.

3. Oracle 10g Server remueve todos los grupos que no satisfacen la cláusula HAVING.
2.5 Agregado de datos utilizando funciones de grupo
2.5.8 AI: Manejo de la cláusula Group By

Arrastre la/s opcion/es hasta la posición correcta que crea necesaria/s para completar la sentencia
SELECT que muestre del historial de cargos cada empleado y la cantidad de cargos que ha ocupado en
la empresa, teniendo en cuenta solo los traspasos en que la fecha de inicio del cargo esta entre el año
1990 y el 2000. Ordene el resultado por número de empleado en forma ascendente.
2.5 Agregado de datos utilizando funciones de grupo
2.5.9 AI: Manejo de la cláusula Having

Arrastre la/s opcion/es hasta la posición correcta que crea necesaria/s para completar la sentencia
SELECT que muestre para cada cargo el salario medio que perciben los empleados que tienen asignado
ese cargo. Solo tener en cuenta los cargos que tengan mas de un empleado. Ordene la salida por el
salario medio en forma descendente.
2.5 Agregado de datos utilizando funciones de grupo
2.5.10 Síntesis
Las funciones de grupo pueden ser utilizadas en una sentencia SELECT en las cláusulas SELECT,
HAVING y ORDER BY.

La mayoría de las funciones de grupo pueden ser aplicadas a todos los valores de datos o sólo a los
valores de datos distintos. Excepto con COUNT(*), las funciones de grupo ignoran los valores nulos.

Funciones definidas por el usuario (o escritas por el programador) no pueden ser utilizadas como
funciones de grupo.
3 Consultas y subconsultas
En SQL, la sentencia SELECT permite escribir una consulta o requerimiento de acceso a datos
almacenados en una base de datos relacional. Dichas consultas SQL van desde una operación simple
al mostrar datos desde una única tabla, hasta operaciones complejas que involucran la unión de varias
tablas, expresiones compuestas para restringir las filas resultantes, etc.

Cuando una consulta posee cierto grado de complejidad es útil dividirla en partes, lo cual brinda mayor
flexibilidad en el reuso de partes y mejor legibilidad de la consulta como un todo.

Subconsultas se utilizan para dividir una consulta en varias partes.

Una subconsulta es una consulta en sí misma que posee existencia dentro de una consulta de nivel
superior. Dicho mecanismo de subconsultas puede utilizarse en cualquier sentencia DML.

Por otro lado, Oracle 10g provee diferentes herramientas de software para interactuar con la base de
datos y realizar tareas de administración. Dos de estas herramientas son SQL*Plus e iSQL*Plus.

Utilizando SQL*Plus es posible ejecutar cualquier sentencia SQL y cualquier programa PL/SQL,
formatear resultados provenientes de consultas, y administrar la base de datos. iSQL*Plus es la
interfase web de SQL*Plus.
3.
Subconsultas (subqueries)
1

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad


teniendo en cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los
contenidos de este currículo y el Material del Estudiante (Kit). Según esta clasificación los
contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los


subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como
complemento a los subtemas, temas o unidad asociados al Material del
Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como
material adicional a los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica


adicional al Material del Estudiante (Kit).
3.1 Subconsultas (subqueries)
3.1.1 Objetivos
Una subconsulta es una consulta dentro de una consulta. En una consulta que posea varias partes, una
subconsulta responde una parte del requerimiento, y la consulta padre responde la otra parte. Cuando se
anidan varias subconsultas, la consulta más interna es evaluada en primer lugar. Subconsultas pueden
utilizarse en cualquier sentencia DML.

Subconsultas utilizadas en la cláusula FROM, en una consulta de nivel tope, son denominadas vistas en
línea (inline view). Vistas en línea son tratadas en un tema posterior. Subconsultas que aparecen en la
cláusula WHERE de una consulta son denominadas subconsultas anidadas.

Cuando una columna de la tabla utilizada en la consulta padre es referenciada en la subconsulta, dicha
subconsulta se denomina subconsulta correlacionada. Una subconsulta escalar retorna una única fila
conformada por un único valor de columna. Dicho tema abarca la funcionalidad de los diferentes tipos de
subconsultas.
3.1 Subconsultas (subqueries)
3.1.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
3.1 Subconsultas (subqueries)
3.1.3 Descripción de las Subconsultas

Una subconsulta es una sentencia SELECT que está incluida en una cláusula de otra sentencia SQL. Se
pueden construir comandos simples y potentes usando subconsultas. Pueden ser muy útiles cuando se
necesita seleccionar filas de una tabla con una condición que depende de los datos que están en la
misma tabla o en alguna otra.

Se puede poner la subconsulta en algunas de las siguientes cláusulas de un comando SQL:

• Cláusula WHERE.
• Cláusula HAVING.
• Cláusula FROM de una sentencia SELECT o DELETE (este tema se desarrollará mas adelante).

Frecuentemente se refiere a una subconsulta como un SELECT anidado, un sub-SELECT, o una


sentencia SELECT interna.

Guía
• Una subconsulta debe estar encerrada entre paréntesis.
• La subconsulta debe aparecer a la derecha del operador de comparación.
• Las subconsultas no pueden contener una cláusula ORDER BY. Se puede tener una sola
cláusula ORDER BY para una sentencia SELECT, y específicamente debe ser la última cláusula
en la sentencia SELECT principal.

Orden de Procesamiento de las Subconsultas Anidadas

Primero se ejecuta la subconsulta (SELECT anidado) y su resultado se pasa para completar la condición
de la consulta principal, o externa.
3.1 Subconsultas (subqueries)
3.1.4 Subconsultas de una sola Fila

Una subconsulta de filas simples devuelve una sola fila desde la sentencia SELECT anidada. Este tipo
de subconsulta utiliza un operador de fila simple.

El ejemplo presentado en la sección 3.1.3, contiene una subconsulta de filas simples, ya que devuelve
un solo valor: el número del departamento en la cual trabaja Vargas.

Se pueden mostrar los datos resultantes de una consulta principal usando una función de grupo en una
subconsulta para devolver una fila simple.
Un error común es que una subconsulta de fila simple dé como resultado más de una fila.

Otros operadores de comparación de una sola fila 3


3.1 Subconsultas (subqueries)
3.1.5 Subconsultas de varias Filas

Las subconsultas que devuelven más de una fila se denominan subconsultas de filas múltiples. Se debe
usar un operador de filas múltiples, tal como IN, en lugar de un operador de fila simple. Este operador
espera uno o más valores.

Operadores de Filas Múltiples

Además del operador IN, SQL ofrece los operadores que se detallan a continuación para escribir

condiciones de búsqueda en subconsultas que devuelven más de una fila.


3.1 Subconsultas (subqueries)
3.1.6 Subconsultas en la cláusula HAVING

Además de la cláusula WHERE, las subconsultas también se pueden usar en la cláusula HAVING.
Primero se ejecuta la subconsulta y el resultado es devuelto a la cláusula HAVING de la consulta
principal.

3.1 Subconsultas (subqueries)


3.1.7 Valores Nulos en el Juego Resultante de una Subconsulta
En la imagen se intenta mostrar todos los empleados que no tienen subordinados.

La consulta retorna “no rows selected”, esto se debe a que uno de los valores devueltos por la consulta
interna es un valor nulo y por eso la consulta entera no devuelve ninguna fila.

No hay problema en que en el juego de resultados de una subconsulta haya valores nulos si se utiliza el
operador IN.

3.1 Subconsultas (subqueries)


3.1.8 AP: Subconsultas de una sola Fila

Laboratorio 3.1.8

Subconsultas de una sola fila

Problemas en los que


se requieran seleccionar filas de
una tabla con alguna condición
que dependa de datos ubicados
en la misma tabla o en alguna
otra.

Duración Estimada: 40 min.

3.1 Subconsultas (subqueries)


3.1.9 AP : Subconsultas de varias
Filas

Laboratorio 3.1.9

Subconsultas de varias filas

Problemas en los que se


requieran seleccionar filas de una
tabla con alguna condición que
dependa de datos ubicados en la
misma tabla o en alguna otra.
Inconvenientes con valores nulos
dentro de subconsultas.

Duración Estimada: 40 min.

3.1 Subconsultas (subqueries)


3.1.10 AI: Manejo de
Subconsultas

Teniendo en cuenta la consulta principal sobre la tabla EMPLOYEES


y las cuatro subconsultas que se podrían anexar a la misma, una con
flechas cada una de las opciones de subconsultas presentadas con el
resultado que crea correcto
3.1 Subconsultas (subqueries)
3.1.11 Síntesis
Una subconsulta es una consulta dentro de una consulta. La escritura de subconsultas es una forma
eficaz de manipular datos. Es posible escribir subconsultas de una sola fila y de múltiples filas.
Subconsultas de una sola fila retornan cero o una fila; mientras que subconsultas de múltiples filas
retornan cero o más filas.

Los operadores de subconsultas más comúnmente utilizados son: IN y EXISTS.

Una subconsulta puede aparecer en la cláusula WHERE o en la cláusula FROM. Las mismas pueden
también reemplazar nombres de tablas en sentencias DELETE, INSERT y UPDATE.

Subconsultas que retornan un resultado formado por una fila y una columna son denominadas
subconsultas escalares. Subconsultas escalares pueden ser utilizadas en la mayoría de lugares donde
puede ser utilizada una expresión.
3.2 Producción de una salida legible con iSQL*Plus

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas o
unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al Material


del Estudiante (Kit).
3.2 Producción de una salida legible con iSQL*Plus
3.2.1 Objetivos
SQL*Plus, ampliamente utilizado por DBAs y desarrolladores para interactuar con la base de datos, es
una herramienta poderosa propietaria de Oracle 10g Server. Utilizando SQL*Plus es posible ejecutar
cualquier sentencia SQL y cualquier programa PL/SQL, formatear resultados provenientes de consultas, y
administrar la base de datos. ISQL*Plus es la interfase web de SQL*Plus (en la versión actual, se
encuentra disponible únicamente bajo plataforma Windows).

SQL*Plus se encuentra empaquetado conjuntamente con el software Oracle y puede ser instalado
utilizando la rutina de instalación del software cliente en cualquier PC. Dicha herramienta es
automáticamente instalada cuando se instala el software servidor.

Este tema discute las capacidades de SQL*Plus y su utilización. Los comandos SQL*Plus son un súper
conjunto de los comandos iSQL*Plus.

3.2 Producción de una salida legible con iSQL*Plus


3.2.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las preguntas de
iniciación. Si desea, puede desplegar su respuesta.
3.2 Producción de una salida legible con iSQL*Plus
3.2.3 Efectos interactivos del iSQL*Plus (& y &&)

En iSQL*Plus, se pueden usar variables de sustitución de tipo ampersand (&) simple para almacenar
valores en forma temporal.

La utilización de variables de sustitución sirve a varios propósitos, entre ellos:

• Especificar un rango de fechas dentro del cual se efectuarán los cálculos.


• Reportar al usuario solamente los datos que le son relevantes.
• Identificar datos para un área determinada.
• Pasar valores de una sentencia SQL a otra.
• Obtener el ingreso de parámetros desde un archivo en lugar de solicitarlos al usuario.
• Cambiar dinámicamente encabezados y pies de páginas.
Nota: iSQL*Plus no soporta chequeos de validación sobre lo que ingresa el usuario.

Variables de Sustitución de Tipo Ampersand (&) Simple

Cuando se ejecuta una consulta, con frecuencia los usuarios desean restringir dinámicamente los datos
devueltos. iSQL*Plus provee esta flexibilidad mediante el uso de variables. Se debe usar el signo
ampersand (&) para identificar a cada variable en una sentencia SQL. No es necesario definir el valor
para cada variable.

&variable_usuario: indica una variable en una sentencia SQL. Si la variable no existe, iSQL*Plus le
solicita al usuario un valor. iSQL*Plus descarta la nueva variable una vez que ésta es usada.

Con un ampersand simple, el usuario es interrogado cada vez que se ejecuta el comando, para evitar
tener que ingresar el valor de una variable de sustitución cada vez que se ejecute el comando, se debe
utilizar un doble ampersand (&&), lo que produce que el valor ingresado la primera vez que se ejecuta el
comando, se almacene para toda la sesión.

3.2 Producción de una salida legible con iSQL*Plus


3.2.4 Definición de Variables

Se pueden definir variables de usuario antes de ejecutar una sentencia SELECT. iSQL*Plus provee un
comando para definir e inicializar variables del usuario: DEFINE .

Guía

• El comando DEFINE creará una variable si la misma no existe, y si existe la redefinirán


automáticamente.
• Cuando se usa el comando DEFINE, se deben utilizar apóstrofos para encerrar una cadena de
caracteres que contenga un espacio en blanco.

El Comando UNDEFINE

Las variables permanecen definidas hasta que:

• Se aplica el comando UNDEFINE sobre una variable.


• Se termina la sesión de iSQL*Plus.

Cuando se aplica UNDEFINE sobre una variable, se pueden verificar los cambios con el comando
DEFINE. Cuando finaliza la sesión iSQL*Plus, se pierden las variables definidas en la misma.

En la figura , se muestra un ejemplo en donde se define, inicializa, usa y elimina una variable de
usuario.
3.2 Producción de una salida legible con iSQL*Plus
3.2.5 El comando VERIFY

Para confirmar los cambios en la sentencia, se usa el comando SET VERIFY de iSQL*Plus. Si SET
VERIFY está configurado con el valor ON, obliga a iSQL*Plus a mostrar el texto del comando antes y
después que el mismo reemplace las variables de sustitución por sus valores.

Recuerde que en una cláusula WHERE, los valores de tipo fecha y carácter deben estar encerrados entre
apóstrofes. La misma regla se aplica a la sustitución de variables.
A fin de evitar el ingreso de los apóstrofes en tiempo de ejecución, se debe encerrar, en la misma
sentencia SQL, al ampersand (&) y a la variable dentro de apóstrofes.

Las variables de sustitución se pueden usar no solamente en la cláusula WHERE de una sentencia SQL,
sino que además pueden usarse para sustituir cláusulas ORDER BY, nombres de tablas, nombres de
columnas, expresiones, texto o sentencias SELECT completas.
3.2 Producción de una salida legible con iSQL*Plus
3.2.6 Selección de parámetros del iSQL*Plus

En iSQL*Plus se puede configurar el entorno de trabajo para cada sesión abierta a través de las
Variables de Sistema . Existen dos formas de personalizar el entorno de trabajo, una es a través de la
pantalla Variables del Sistema que se encuentra dentro de la opción Preferencias y la otra es
utilizando el comando SET .

SET system_variable value

Todas las variables de sistema toman valores por defecto cuando se inicia una sesión.

- Link de ayuda: https://helot.cs.cf.ac.uk


.2 Producción de una salida legible con iSQL*Plus
3.2.7 AP: Consultas con
condiciones Interactivas

Laboratorio 3.2.7

Consultas con condiciones


Interactivas

Utilización de variables de
sustitución iSQL*Plus con el fin de
dar la posibilidad al operador de
modificar la/s condición/es de
búsqueda/s.

Duración Estimada: 40 min.

3.2 Producción de una salida legible con iSQL*Plus


3.2.8 AP: Consultas con Campos
Interactivos

Laboratorio 3.2.8

Consultas con Campos


Interactivos

Utilización de variables de
sustitución en iSQL*Plus con el fin
de dar la posibilidad al operador
de elegir tanto las tablas como
sus respectivas columnas a
mostrar.

Duración Estimada: 20 min.

3.2 Producción de una salida legible con iSQL*Plus


3.2.9 AI: Efectos interactivos de
iSQL*Plus con &

Siga los pasos indicados en esta actividad para practicar la


interacción de usuario con iSQL*Plus.
3.2 Producción de una salida legible con iSQL*Plus
3.2.10 AI: Efectos interactivos de iSQL*Plus con &&

Siga los pasos indicados en esta actividad para practicar la interacción de usuario con iSQL*Plus.
3.2 Producción de una salida legible con iSQL*Plus
3.2.11 Síntesis
SQL*Plus es la herramienta nativa de Oracle 10g para interactuar con la base de datos. SQL*Plus
soporta todas las sentencias SQL y posee comandos propios para dar formato y para mejorar la
utilización de la herramienta. En Oracle 10g, SQL*Plus incluye comandos que dan soporte a la
administración de base de datos. Utilizando esta herramienta, es posible producir sentencias SQL
interactivas y reportes con determinado formato de salida.

SQL*Plus manipula su propio buffer donde almacena sentencias SQL. Es posible editar el buffer
utilizando comandos de edición SQL*Plus. El comando DESCRIBE es utilizado para recuperar
información acerca de una tabla, vista, función o procedimiento.
Múltiples comandos SQL y SQL*Plus pueden ser almacenados en un archivo y ejecutados como una
unidad. Tales archivos se denominan scripts. En SQL*Plus, el comando SET es utilizado para configurar
el ambiente de trabajo. El comando COLUMN es utilizado para definir las características de las columnas
presentes en una consulta SQL.

Es posible definir variables en SQL*Plus. Variables también pueden ser utilizadas en sentencias SQL.
Determinados valores serán aceptados como entrada de usuario cuando la sentencia SQL es ejecutada.
Variables definidas en SQL*Plus siempre poseen el tipo de dato CHAR.

iSQL*Plus es la interfase web de SQL*Plus. iSQL*Plus consiste de tres capas: la capa cliente (browser),
la capa intermedia (Oracle HTTP Server e iSQL*Plus Server), y la capa de base de datos (base de
datos Oracle 10g y Oracle Net). Ciertos comandos SQL*Plus no se encuentran disponibles en
iSQL*Plus.
ACA SI SE LE ESCRIBE LA PALABRA QUE REALMENTE VA QUE ES “DEFINE” NO LO TOMA
COMO VALIDO CUAK! Y EN LA PREGUNTA NUMERO 2 SI BIEN EN EL GRAFICO MARCA OK LA
PREGUNTA NO LA TOMA PARA EL PUNTAJE FINAL. OTRO CUAK DEL CUESTIONARIO
4 Tablas

La tabla es la estructura básica de almacenamiento en una base de datos Oracle. Como parte de su
definición, una tabla posee columnas, cada columna con un tipo específico de datos, y almacena filas de
datos. Los usuarios finales y las aplicaciones de software acceden a datos a través de SQL, y manipulan
datos a través de sentencias DML (Data Manipulation Language).

Los datos almacenados en varias tablas se relacionan a través de valores de columna comunes. Para
establecer estas relaciones entre tablas se especifica que determinada columna puede tomar valores en un
dominio o rango de valores específico, o que dicha columna referencia a una columna común en otra tabla.
Estas especificaciones se denominan restricciones. Una restricción puede ser considerada como una regla
o política definida en la base de datos para forzar reglas de negocio e integridad de datos.

4.1 Manipulación de datos

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al


Material del Estudiante (Kit).
4.1 Manipulación de datos
4.1.1 Objetivos
En una base de datos Oracle, es posible manipular datos utilizando sentencias DML (Data Manipulation
Language). Este tema cubre cómo manipular datos y cómo coordinar cambios múltiples utilizando
transacciones.

Oracle 10g es una base de datos multiusuario, y más de un usuario o sesión puede cambiar datos al
mismo tiempo. Este tema también abarca el mecanismo de bloqueos y cómo el mismo es utilizado para
controlar esta concurrencia.

Otro efecto de una base de datos multiusuario es que los datos pueden cambiar durante la ejecución de
sentencias. Es posible ejercitar determinados controles sobre la consistencia o visibilidad de estos
cambios dentro de una transacción.
4.1 Manipulación de datos
4.1.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
4.1 Manipulación de datos
4.1.3 Descripción de DML

El Lenguaje de Manipulación de Datos o DML (Data Manipulation Language) es una parte central del
SQL. Cuando se quiere agregar, modificar, o eliminar datos de la base de datos, se ejecuta una sentencia
DML. Un conjunto de sentencias DML que aun no se han hecho permanentes se denomina una
transacción o unidad de trabajo lógica.

En la figura se muestran los comandos de manejo de datos.

4.1 Manipulación de datos


4.1.4 Descripción del Insert – Sintaxis

Se puede agregar una nueva fila a una tabla por medio de la cláusula INSERT. Este comando con la
cláusula VALUES inserta únicamente una fila por vez en la tabla.

Como se puede insertar una nueva fila con valores para cada columna, entonces no se requiere la lista
de las columnas en la cláusula INSERT. Sin embargo, los valores deben ser listados de acuerdo al orden
que por defecto (como se ven al ejecutarse un DESCRIBE de la tabla) tienen las columnas en la tabla.

Guías
Se debe encerrar a los valores de tipo caracter y fecha entre apóstrofos; y no encerrar los valores numéricos.

Para insertar valores nulos en una columna, se puede:

Omitir la columna de la lista (método implícito).


Especificar la palabra clave NULL en la lista VALUES (método
explícito).
Especificar una cadena vacía (‘’) en la lista VALUES; para cadenas de
caracteres y valores de fechas (método explícito).

Para insertar valores especiales, se pueden usar las siguientes funciones:

SYSDATE, que devuelve la fecha y hora actuales.


UID, que devuelve un número entero que identifica unívocamente al
usuario actual.
USER, que devuelve un tipo VARCHAR2 que representa el nombre del
usuario actual.
Para verificar que las filas fueron insertadas dentro de la tabla, se puede escribir una sentencia SELECT
.

Sepa que puede usar valores nulos en la columna de destino verificando el estado Null con el comando
DESCRIBE de iSQL*Plus
4.1 Manipulación de datos
4.1.5 Inserción de Fechas

Cuando se ingresa un valor de fecha, el formato usado es el definido por la variable correspondiente en
el registro de Windows para Oracle 10g. Si se requiere ingresar una fecha en otro formato, se debe
utilizar la función TO_DATE.
4.1 Manipulación de datos
4.1.6 Copia de Registros desde otra tabla

Se puede usar la sentencia INSERT para agregar filas a una tabla donde los valores se derivan de otras
tablas ya existentes. En lugar de la cláusula VALUES, se usa una subconsulta. El número de columnas
en la lista de la cláusula INSERT debe coincidir con el número de valores en la subconsulta.

En la figura se muestra un ejemplo en donde se copia a la tabla JOB_HISTORY los empleados del
departamento numero 60.

4.1 Manipulación de datos


4.1.7 Descripción del Update – Sintaxis

Se pueden modificar filas existentes en una tabla usando la cláusula UPDATE.

Confirme la operación de actualización realizando una consulta en la tabla para mostrar las filas
actualizadas.
4.1 Manipulación de datos
4.1.8 Importancia del WHERE en actualizaciones

Por lo general, es conveniente usar la clave primaria para identificar a una fila en particular . El uso de
otras columnas puede causar que inesperadamente se actualicen varias filas. Por ejemplo, identificar a
una fila en la tabla VENDEDORES por la columna APELLIDOS es peligroso porque varios empleados
pueden tener el mismo.

Para verificar las modificaciones se puede escribir una sentencia SELECT que consulte las filas
correspondientes.

Actualizar Todas las Filas de la Tabla

Si no se incluye una cláusula WHERE en el comando UPDATE, todas las filas de la tabla serán actualizadas.
4.1 Manipulación de datos
4.1.9 Manejo de Foreign Key en actualizaciones

Si se intenta actualizar un registro con un valor que viola una restricción de integridad, se producirá un
error. Si el valor especificado no existe en la tabla padre (en este caso no existe el departamento 250),
entonces se obtendrá el código de error ORA-02291 que indica la violación.

Puede actualizar varias columnas en la cláusula SET de una sentancia UPDATE escribiendo varias
subconsultas.

4.1 Manipulación de datos


4.1.10 Descripción del Delete – Sintaxis

Se pueden eliminar filas usando la cláusula DELETE , si se omite la cláusula WHERE, se eliminarán
todas las filas de la tabla. Para verificar las eliminaciones se puede escribir una sentencia SELECT que
consulte las filas borradas.

En la figura se muestra un ejemplo del uso del comando DELETE.


4.1 Manipulación de datos
4.1.11 Manejo de Foreign Key en eliminaciones

Si se intenta borrar un registro con un valor que viola una restricción de integridad, se producirá un error.
Si el registro padre que se intenta borrar tiene registros hijos, se recibirá el mensaje de “registro hijo
encontrado”, con el código ORA-02292 para esa violación.
4.1 Manipulación de datos
4.1.12 Descripción del Merge – Beneficios

La sentencia MERGE, introducida en Oracle 10g, posibilita que una única sentencia SQL sea utilizada
tanto para actualizar como para insertar filas en una tabla. La misma posee una especificación de unión
que describe cómo determinar si debe ejecutarse una operación UPDATE o INSERT.

La sentencia MERGE provee una operación del tipo UPDATE-ELSE-INSERT, esto es, actualizar si la fila
existe, insertar en caso contrario. Dicha operación es útil en ambientes de almacenes de datos (data
warehousing), donde se realiza la actualización incremental de un destino basado en uno o más orígenes
de datos.

Como ejemplo, considerar que existe una tabla denominada new_sales que contiene inserciones y
actualizaciones que deben ser aplicadas a una tabla destino denominada sales. El diseño del proceso de
carga del almacén de datos determina que la tabla new_sales contiene filas según la siguiente semántica:

• Si un registro, identificado por sales_transaction_id, correspondiente a una transacción en la tabla


new_sales existe en sales, entonces la tabla sales adicionar los valores monto de venta
(sales_dollar_amount) y cantidad vendida (sales_quantity_sold) de la tabla new_sales a la fila
existente en la tabla sales.
• En caso contrario, el nuevo registro completo de la tabla new_sales en la tabla sales.

Previo a Oracle 10g, dicha semántica debería ser implementada a través de dos sentencias SQL. Una
sentencia para actualizar las filas apropiadas en la tabla sales, y otra para insertar las nuevas filas en
sales . A partir de Oracle 10g, una operación merge puede ser ejecutada utilizando una única
sentencia SQL .

Todo trigger de INSERT o UPDATE definido sobre la tabla destino será ejecutado tal como si se
ejecutase un INSERT o UPDATE estándar.

En la cláusula de actualización, no es posible especificar DEFAULT cuando se está actualizando una


vista, y no es posible actualizar una columna que haya sido referenciada en la cláusula ON. Además, en
la misma sentencia MERGE, no es posible actualizar la misma fila de la tabla destino múltiples veces. Es
posible, no obstante, agregar los resultados en una vista en línea en la cláusula USING .
4.1 Manipulación de datos
4.1.13 Descripción de transacciones

Oracle 10g Server asegura consistencia con los datos basándose en transacciones. Las transacciones
otorgan más flexibilidad y control cuando cambian los datos y aseguran consistencia en los datos ante
una eventual falla en el proceso del usuario o una falla del sistema. Existen tres tipos de transacciones
.

Las transacciones consisten en comandos DML que llevan a cabo un cambio en los datos de manera
consistente. Por ejemplo, una transferencia de fondos entre dos cuentas, debiera incluir un crédito en
una cuenta y un débito en la otra por la misma cantidad. Ambas acciones debieran tener éxito o fallar
como una sola operación. El crédito no debiera poder confirmarse sin el débito correspondiente. En la
figura se muestran los comandos utilizados para el control de transacciones.
El control de transacciones se puede hacer tanto en forma explícita como implícita .

El comando AUTOCOMMIT se puede activar y desactivar. Si se activa, cada sentencia DML individual se
valida en cuanto se ejecuta. No puede hacer rollback en los cambios. Si se desactiva, la sentencia COMMIT
aún se puede emitir explícitamente. Además, la sentencia COMMIT se omite al emitirse una sentencia DDL o al
salir de iSQL*Plus.
4.1 Manipulación de datos
4.1.14 Consistencia de Lecturas

Oracle 10g Server garantiza la consistencia de lectura registrando los valores anteriores de los datos que
fueron cambiados por cada transacción (cometida o no) en los segmentos de rollback.

Sólo Oracle 10g puede acceder a los segmentos de Rollback, ni los usuarios ni el DBA pueden acceder a
ellos. Si hay una falla en el sistema, Oracle 10g automáticamente recupera la información del segmento,
incluyendo las entradas de rollback para transacciones interactivas. Una vez que se completa la
recuperación, Oracle 10g cancela las transacciones que no fueron completadas ni vueltas hacia atrás en
el momento de la falla.

Para cada segmento rollback, Oracle 10g mantiene una tabla de transacciones:

• una lista de todas las transacciones que usan los segmentos de rollback
• las entradas de rollback por cada cambio realizado por estas transacciones.
Los segmentos de rollback registran los valores de los datos antes de los cambios para cada transacción,
luego vinculan cada nuevo cambio al cambio previo. Si se debe recuperar una transacción, Oracle
10g aplica los cambios en cadena a los bloques de datos en orden de manera que los datos sean
reestablecidos a sus valores originales.

Cada vez que una transacción de usuario comienza, se le asigna un segmento de rollback en una de las
siguientes dos maneras:

Oracle 10g puede asignar una transacción automáticamente al próximo segmento de rollback disponible.
La asignación de la transacción ocurre cuando se edita la primer sentencia DML en la transacción. Nunca
se asignan transacciones de solo lectura a un segmento rollback.

• Una aplicación puede asignar una transacción a un segmento de rollback específico. Al comienzo
de una transacción, un desarrollador o usuario de aplicaciones puede especificar un segmento
rollback particular que Oracle 10g debería usar cuando se ejecute la transacción.
Cuando una transacción se completa (commit), Oracle 10g libera la información de rollback pero no la
destruye inmediatamente. La información permanece en el segmento de rollback para crear vistas
consistentes de lectura de los datos pertinentes para las consultas que comenzaron antes que la
transacción se completara exitosamente.
4.1 Manipulación de datos
4.1.15 Bloqueos

La sentencia SELECT FOR UPDATE se usa para bloquear registros específicos de una tabla,
prohibiendo a otras sesiones modificar o borrar los registros bloqueados. Cuando los registros están
bloqueados, otras sesiones pueden seleccionar estos registros pero no pueden modificarlos o
bloquearlos. La sintaxis de esta sentencia es igual a la de la sentencia SELECT, agregándole la cláusula
FOR UPDATE al final de la sentencia. Los registros bloqueados solo se liberarán a través de un COMMIT
o ROLLBACK, aun cuando los datos no hayan sido modificados.

Bloqueo de tabla

La sentencia LOCK se usa para bloquear en forma explícita una tabla completa, prohibiéndole a otras
sesiones realizar algunas o todas las operaciones DML sobre la misma. En la figura , se muestra la
sintaxis de dicha sentencia.
El uso de bloqueos explícitos incrementa la posibilidad de que se produzcan abrazos mortales
(deadlocks), por o tanto se lo debe usar cuidadosamente y con moderación.
Un abrazo mortal (deadlocks) ocurre cuando dos transacciones poseen bloqueos y cada una esta
esperando por el bloqueo que maneja la otra. Oracle 10g Server detecta esta condición y dispara una
excepción en una de las dos sesiones.

Bloqueo DML

Para administrar la concurrencia, múltiples sesiones modificando el mismo dato al mismo tiempo, Oracle
10g Server emplea los bloqueos a nivel de tabla y de registro. Los bloqueos a nivel de registro son
siempre exclusivos, los de tabla pueden ser tanto compartido como exclusivo. Los bloqueos compartidos
prohíben que haya otro exclusivo pero si permiten otros compartidos sobre el mismo recurso. Los
exclusivos prohíben que haya tanto otro compartido como otro exclusivo. Sin embargo, los bloqueos no
prohíben los accesos de lecturas. Para modificar un dato, Oracle 10g debe adquirir un bloqueo de nivel
de registro sobre las filas que se modificaran. Las sentencias INSERT, UPDATE, DELETE y SELECT
FOR UPDATE bloquean implícitamente los registros a los que afectan. Oracle 10g Server usa cinco tipos
de bloqueos .
En la figura , se muestra un cuadro resumiendo los tipos de bloqueos que maneja Oracle 10g Server.
4.1 Manipulación de datos
4.1.16 AI: Insert

Ejercitar inserciones de datos uniendo con flechas.


4.1 Manipulación de datos
4.1.17 AI: Update

Complete la sentencia UPDATE arrastrando las partes al lugar correspondiente. Para esto, considere las
siguientes premisas con respecto a la sentencia UPDATE resultante:

• Actualiza sólo aquellos empleados que trabajan en “Santa Fe” o en “Buenos Aires” (localidades
cuyos códigos corresponden a 2900 y 2700, respectivamente).
• Para estos empleados, establece su valor department_id al ID de departamento correspondiente
a “Bombinhas” (location_id 2100)
• Establece el salario de cada empleado a 1,1 veces el salario promedio de su departamento
• Establece la comisión de cada empleado a 1,5 veces la comisión promedio de su departamento.

4.1 Manipulación de datos


4.1.18 AI: Delete

Responda “V” (Verdadero) o “F” (Falso) según sean los pares de sentencias DELETE equivalentes o
no.
4.1 Manipulación de datos
4.1.19 AI: Merge

Teniendo en cuenta el estado de las tablas PRODUCT_INFORMATION y NEW_PRICES antes y


después de la ejecución de la operación de merge, lea cuidadosamente la sentencia MERGE ejecutada y
clasifique las filas resultantes con “I” (Inserted) o “U” (Updated).
4.1 Manipulación de datos
4.1.20 AI: Manejo de transacciones

¿Cuál de las sentencias de la figura no finaliza una transacción?

4.1 Manipulación de datos


4.1.21 Síntesis
Este tema abarcó cómo manipular datos. Esto incluye las sentencias DML INSERT, UPDATE, MERGE y
DELETE, conjuntamente con SELECT FOR UPDATE y LOCK TABLE. La sentencia TRUNCATE posee
similitudes a DELETE, pero también poseen diferencias importantes.

Se discutió sobre concurrencia y cómo utilizar bloqueos para gestionar cambios concurrentes, resaltando
los causales de deadlocks (bloqueos simultáneos). Además, se discutió sobre consistencia y cómo utilizar
transacciones para gestionar consistencia. La sentencia SET TRANSACTION es usualmente utilizada para
establecer consistencia a nivel de sentencia o de transacción, y la misma puede también ser utilizada
para asignar explícitamente una transacción a un segmento de rollback específico.
4.2 Creación y gestión de tablas

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al


Material del Estudiante (Kit).
4.2 Creación y gestión de tablas
4.2.1 Objetivos
La tabla es la estructura básica de almacenamiento en una base de datos Oracle. Una tabla posee
columnas como parte de su definición y almacena filas de datos. Este tema abarca la creación y
modificación de tablas, así como también cubre los diferentes tipos de dato que pueden ser utilizados al
especificar una columna.

4.2 Creación y gestión de tablas


4.2.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
4.2 Creación y gestión de tablas
4.2.3 Descripción de los objetos de una base de datos
Un esquema es una colección de objetos que están disponibles a un usuario. Los objetos de un
esquema son las estructuras lógicas que refieren directamente a los datos de la base de datos. Los
objetos de un esquema incluyen estructuras tales como tablas, vistas, secuencias, procedimientos
almacenados, sinónimos e índices.

Tablas: Una tabla es la unidad básica de almacenamiento de datos en una base de datos Oracle. Las
tablas de una base de datos mantienen todos los datos accesibles por el usuario.

Vistas: Una vista es una presentación “hecha a medida” de los datos en una o más tablas. Las vistas
también pueden ser interpretadas como “consultas almacenadas”.
Una vista es una “tabla virtual” que no contiene o almacena datos en la base de datos, sino que estos
están definidos mediante una consulta.

Secuencias: Una secuencia genera una lista serial de números únicos para columnas numéricas de
tablas de una base de datos. Las secuencias simplifican la programación de la aplicación generando
automáticamente valores numéricos únicos para las filas de una única tabla o múltiples tablas.

Sinónimos: Un sinónimo es un alias para una tabla, vista, secuencia o unidad de programa. Un
sinónimo no es realmente un objeto en sí mismo, sino una referencia directa a un objeto.

Índices: Los índices son estructuras opcionales asociadas con tablas, que pueden ser creadas para
incrementar la performance en la recuperación de datos. Cuando se procesa una consulta, Oracle
10g puede usar algunos o todos los índices disponibles para ubicar las filas consultadas eficientemente.
Los índices son lógica y físicamente independientes de los datos. Ellos pueden ser creados y borrados
en cualquier momento sin efecto sobre las tablas u otros índices.
4.2 Creación y gestión de tablas
4.2.4 Descripción de DDL

Los comandos DDL son un subconjunto de comandos SQL usados para crear, modificar o eliminar
estructuras de base de datos en Oracle, agregar comentarios para el diccionario de datos,
establecer opciones de auditoría y analizar tablas, índices o cluster.

Esos comandos tienen un efecto inmediato sobre la base de datos y también graban información en el
diccionario de datos.
4.2.4 Descripción de DDL
4.2.4.1 Reglas de Nomenclatura
Instrucciones de Nomenclatura

Use nombres descriptivos pára tablas y otros objetos de base de datos


4.2 Creación y gestión de tablas
4.2.5 Tablas de Usuario

Las tablas de usuario son tablas destinadas a ser utilizadas por los usuarios finales de la base de datos.
Las mismas son creadas y manipuladas por los usuarios finales y contienen datos propios de las
aplicaciones que utilizan la base de datos.

Un usuario final de la base de datos realiza inserciones, actualizaciones y eliminaciones de datos sobre
tablas de usuario. Las tablas que pertenecen al diccionario de datos son gestionadas por el DBMS y no
deberían ser modificadas por un usuario final.

Las tablas del diccionario de datos existen durante toda la vida útil de la base de datos y son vitales para
el correcto funcionamiento de la misma. Las tablas de usuario poseen existencia finita; las mismas son
creadas y eliminadas de acuerdo a requerimientos específicos de un usuario o aplicación particular .
4.2 Creación y gestión de tablas
4.2.6 Diccionario de datos

El diccionario de datos es una de las partes más importantes de una base de datos Oracle. Es un
conjunto de tablas solo-lectura las cuales proveen información acerca de su base de datos asociada.

Ya que el diccionario es solo-lectura, los usuarios solo pueden acceder al mismo ejecutando la sentencia
SELECT.

Los datos en las tablas base de un diccionario de datos son necesarios para que Oracle 10g Server
funcione. Por lo tanto, solo Oracle 10g Server debería escribir o cambiar el diccionario de datos.

Durante la operación de una base de datos, Oracle 10g Server lee el diccionario de datos para averiguar

que los objetos existen y que usuarios tienen los permisos de acceso a ellos. Oracle 10g Server también

actualiza el diccionario de datos continuamente para reflejar los cambios en las estructuras y permisos de

la base de datos.

4.2 Creación y gestión de tablas


4.2.7 Tipos de datos

Cuando se crea una tabla, se debe especificar el tipo de dato deseado para cada columna de la
misma. Oracle 10g Server posee varios tipos de datos para almacenar diferentes tipos de información y
trata de diferente manera a valores con tipos de datos distintos. Los tipos de datos básicos son carácter
(character), número (number), fecha (date) y RAW.

El ancho de columna determina el número de caracteres máximo para los valores de esa columna. Se
debe especificar el tamaño para las columnas de tipo VARCHAR2. Se puede especificar el tamaño para
las columnas de tipo NUMBER y CHAR, aunque se dispone de los valores por defecto (38 para NUMBER
y 1 para CHAR).
Los tipos de datos en Oracle 10g pueden encontrarse clasificados en cinco grandes categorías:

• Caracteres: almacenan datos alfanuméricos, representan palabras y texto, y manipulan cadenas


de caracteres.
• Numéricos: almacenan números de punto fijo o flotante de cualquier tamaño.
• Fecha y Hora: almacenan valores de fecha y hora de longitud fija.
• Binarios: almacenan imágenes, audio/video, archivos ejecutables, y datos similares.
• ROW ID: almacenan la dirección de almacenamiento físico de las filas de las tablas. Cada tabla
tiene una pseudo-columna llamada ROWID.

Los tipos de objetos largos se utilizan para almacenar datos de gran tamaño y de longitud variable dentro
de una base de datos Oracle 10g, estos tipos provienen de las diferentes categorías: CLOB, NCLOB,
BLOB y BFILE.

4.2 Creación y gestión de tablas


4.2.8 Crear una tabla – Sintaxis

Es posible crear tablas para almacenar datos ejecutando el comando SQL CREATE TABLE. Este es uno
de los comandos del lenguaje de definición de datos o DDL (Data Definition Language).

Para crear una tabla, un usuario debe tener el privilegio CREATE TABLE y un área de almacenamiento
para crear objetos. El administrador de la base de datos usa comandos del lenguaje de control de datos o
DCL (Data Control Language), para otorgarle privilegio a los usuarios.

En la figura , se muestra la sintaxis abreviada de este comando y en la un ejemplo de su utilización.

Nota: para obtener información sobre las tablas que tiene creadas en su esquema puede consultar la
vista del diccionario de datos USER_TABLES.
4.2 Creación y gestión de tablas
4.2.9 Modificar una tabla – Sintaxis

Una vez que se han creado las tablas, se pueden modificar sus estructuras usando el comando ALTER
TABLE. También es posible agregar o eliminar columnas, modificar la longitud de las mismas, agregar o
eliminar restricciones y habilitar o deshabilitar restricciones usando este comando.

Agregar una Columna


Se pueden agregar columnas a una tabla usando el comando ALTER TABLE con la cláusula ADD. -

Observaciones

• No se puede especificar la posición de la columna. La nueva columna se convierte en la última.


• Si una tabla ya contiene filas cuando se agrega una columna, entonces todos los campos en la
columna nueva son inicialmente NULL.
• Solamente se puede definir una columna NOT NULL que no contiene filas, porque los datos no
pueden ser especificados al mismo tiempo que se agrega la columna.

Modificar una Columna

Se puede modificar la definición de una columna usando el comando ALTER TABLE con la cláusula
MODIFY. La modificación de la columna puede incluir cambios de su tipo de dato, tamaño, valor por
defecto y restricción de NOT NULL. -

Eliminar una Columna

Se puede eliminar una columna usando el comando ALTER TABLE con la cláusula DROP - o
puede marcarla como no utilizada (con la cláusula SET UNUSED) para eliminarla en otro momento para
evitar las horas pico de uso de la base de datos, sobre todo si la tabla es muy grande ya que Oracle
10g Server tiene que reconstruir la tabla entera y ocupa muchos recursos para reconstruir tablas grandes.
-

Observaciones

• Los índices y las restricciones de la/s columna/s también son eliminados.


• Las columnas marcadas como no utilizadas no aparecerán si ejecuta el comando DESCRIBE.
• No es posible seleccionar la columna a eliminar si hay más de una marcada como no utilizada.

En Oracle 10g Server se pueden eliminar más de una columna a la vez.

Opción DEFAULT:

Cuando se define una tabla, se puede especificar que se asigne un valor por defecto a una columna mediante
la opción DEFAULT. Esta opción evita que se introduzcan valores nulos en las columnas si se inserta una fila
sin un valor para la columna. El valor por defecto puede ser un literal, una expresión o una función SQL .
4.2 Creación y gestión de tablas
4.2.10 Eliminar una tabla – Sintaxis

Si se quiere eliminar una tabla, se debe borrar tanto las filas como la estructura de la misma, invocando el
comando DROP TABLE. Otros comandos que afectan a las tablas, que son cubiertos en esta sección
son:

• RENAME, para cambiar el nombre a un objeto de la base de datos.


• TRUNCATE, para eliminar todas las filas de una tabla.

El comando DROP TABLE elimina la definición de una tabla en Oracle 10g. Cuando se elimina una
tabla, la base de datos pierde todos los datos que hay en ella y todos sus índices asociados. La opción
CASCADE CONSTRAINTS también elimina todas las restricciones de integridad dependientes.

El comando DROP TABLE, una vez ejecutado, es irreversible. Oracle 10g Server no consulta al usuario
una vez que éste ejecuta el comando DROP TABLE. Si el usuario es el propietario de la tabla o tiene un
privilegio de alto nivel, la tabla se elimina inmediatamente. Todos los comandos DDL llevan a cabo un
commit, por lo tanto, la transacción se hace permanente.

Renombrar y Truncar una Tabla


Existen comandos DDL, entre ellos el comando RENAME, que se usa para renombrar una tabla, vista,
secuencia o sinónimo. Cuando renombra una tabla, Oracle 10g Server automáticamente transfiere las
restricciones de integridad, índices y privilegios de la tabla vieja a la nueva. Todos los objetos que
dependían de la tabla renombrada, tales como vistas, sinónimos, procedimientos almacenados y
funciones, quedaran en estado inválido. Este comando se puede utilizar solo para renombrar los objetos
que usted es dueño, no puede renombrar objetos de otro usuario, para eso se debe utilizar el comando
ALTER TABLE con la cláusula RENAME TO.

El comando TRUNCATE TABLE , que se usa para eliminar todas las filas de una tabla y liberar el
espacio utilizado por la misma. Utilizando la sentencia TRUCATE, es diferente a eliminar una tabla y
recrearla, debido a que TRUNCATE no invalida a los objetos dependientes, además no elimina a los
índices, triggers o restricciones de integridad referencial.

Nota: todos esos comandos son de definición de datos o DDL. Cuando se emiten esas
sentencias, se realiza un commit automático. No se puede hacer un rollback sobre comandos
DDL. Por lo tanto, se debe ser muy cuidadoso cuando se los ejecuta.
4.2 Creación y gestión de tablas
4.2.11 AP: Creación y gestión de tablas

Laboratorio 4.2.11

Creación y gestión de tablas

Creación de tablas, anexo de


nuevas columnas y modificación
de columnas existentes.
Eliminación de contenidos de una
tabla.

Duración Estimada: 30 min.

4.2 Creación y gestión de tablas


4.2.12 AI: Crear tablas

Teniendo en cuenta la sentencia CREATE TABLE presentada en la figura, seleccione la opción que
mejor describa a esta sentencia.
4.2 Creación y gestión de tablas
4.2.13 AI: Modificar tablas

Seleccione la/s sentencia/s que considere correcta/s para eliminar la columna SALARY de la tabla
EMPLOYEES.

4.2 Creación y gestión de tablas


4.2.14 Síntesis
Las tablas son la estructura básica para el almacenamiento de datos. Una tabla contiene filas y columnas,
como una planilla de cálculo. Cada columna posee determinada característica que restringe y verifica los
datos que la misma almacena. Existen varios tipos de dato que pueden ser utilizados para definir
columnas. CHAR, NCHAR, VARCHAR2, CLOB y NCLOB son los tipos de dato caracter o alfanuméricos.
BLOB, BFILE y RAW son los tipos de dato binarios. DATE, TIMESTAMP e INTERVAL son los tipos de dato
fecha. Además, el tipo de dato TIMESTAMP puede almacenar información de zona horaria.
La sentencia CREATE TABLE es utilizada para crear una nueva tabla. Una tabla debe poseer como
mínimo una columna, y un tipo de dato debe ser asignado a dicha columna. Nombres de tabla y nombres
de columna deben comenzar con una letra y pueden contener: letras, números o caracteres especiales.
Es posible crear una nueva tabla a partir de una tabla existente utilizando la sentencia (CTAS) CREATE
TABLE ... AS SELECT ... . Es posible adicionar, modificar o eliminar columnas de una tabla
existente utilizando la sentencia ALTER TABLE. Antes de cambiar el tipo de dato de una columna, la
misma debe estar vacía.
4.3 Inclusión de restricciones

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al


Material del Estudiante (Kit).
4.3 Inclusión de restricciones
4.3.1 Objetivos
En una base de datos relacional, los datos almacenados en varias tablas pueden estar relacionados. Una
restricción puede ser considera como una regla o política definida en la base de datos para forzar reglas
de negocio e integridad de datos. Este tema abarca la creación y utilización de restricciones.

4.3 Inclusión de restricciones


4.3.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
4.3 Inclusión de restricciones
4.3.3 Descripción de restricciones

Las restricciones (constraints) garantizan el cumplimiento de las reglas a nivel de tablas, en cualquier
momento que una fila es insertada, actualizada o borrada de la tabla. Las restricciones deben ser
satisfechas para que la operación tenga éxito. Además, impiden la eliminación de una tabla si existen
dependencias desde otras tablas.
Todas las restricciones se encuentran almacenadas en el diccionario de datos. Las restricciones son
fáciles de referenciar si se les da un nombre significativo. Los nombres deben seguir las reglas estándar
para los nombres de los objetos. Si no se le asigna un nombre a la restricción, Oracle 10g Server genera
uno con el formato SYS_Cn, donde n es un entero para crear un nombre único.

Las restricciones pueden ser definidas a uno de dos niveles.

Obviamente existen otros métodos de definir reglas obre una columna de una tabla (triggers,
procedimientos, funciones, etc.) pero las restricciones de integridad presentan algunas ventajas.
4.3 Inclusión de restricciones
4.3.4 Tipos de restricciones

La Restricción NOT NULL

La restricción NOT NULL asegura que en la columna no se permitan valores nulos. Las columnas sin la
restricción NOT NULL pueden contener valores nulos, por defecto. Esta restricción puede especificarse
solamente a nivel de columna, no a nivel de tabla.

La Restricción UNIQUE

Una restricción UNIQUE define a una columna o combinación de ellas como una clave única. Dos filas en
la misma tabla no pueden tener el mismo valor para esta clave. Se permiten valores nulos si la clave se
basa en una sola columna.

Las restricciones UNIQUE pueden definirse como restricción a nivel de columna o restricción a nivel de
tabla. Una clave única compuesta se crea usando la definición de restricción a nivel de tabla.

Para una columna clave única se crea automáticamente un índice UNIQUE.

Una restricción UNIQUE no es lo mismo que, o un sinónimo de, la restricción PRIMARY KEY.

La Restricción PRIMARY KEY

Una restricción PRIMARY KEY crea una clave primaria para la tabla. Se puede crear solamente una clave
primaria por tabla. La restricción PRIMARY KEY es una columna, o conjunto de ellas, que identifican
unívocamente a cada fila de una tabla. Esta restricción garantiza la unicidad de la columna (o
combinación de ellas) y asegura que ninguna columna que sea parte de la clave primaria pueda contener
un valor nulo.

Puede definirse a nivel de columna o de tabla. Una clave primaria compuesta se crea usando la definición
a nivel de tabla.

Se crea automáticamente un índice UNIQUE para la columna PRIMARY KEY.

La Restricción FOREIGN KEY

La restricción FOREIGN KEY, o de integridad referencial, designa a una columna, o combinación de ellas,
como una clave foránea y establece una relación con una clave primaria o clave única de la misma tabla
o de otra tabla.

El valor de la clave foránea debe ser del mismo tipo que el de la tabla padre, o debe ser NULL.

Las restricciones FOREIGN KEY pueden definirse a nivel de columna o de tabla. Una clave foránea
compuesta se crea usando la definición a nivel de tabla.

Las claves foráneas están basadas en valores de datos y son puramente lógicas, no son punteros físicos.

Una clave foránea que es parte de una clave primaria no puede tener un valor NULL porque ninguna
parte de una clave primaria puede tenerlo.

La clave foránea se define en la tabla hija, y la tabla que contiene la columna referenciada es la tabla
padre. Para definirla se usa una combinación de las siguientes palabras claves:

• FOREIGN KEY se usa para definir la columna en la tabla hija, cuando se establece la restricción
a nivel de tabla.
• REFERENCES identifica la tabla y columna de la tabla padre.
• ON DELETE CASCADE indica que cuando se borra la fila en la tabla padre, las filas
dependientes en la tabla hija, también serán borradas.
• ON DELETE SET NULL convierte valores de clave ajena en nulos cuando se elimina el valor
principal.

Sin la opción ON DELETE CASCADE, la fila en la tabla padre no puede ser borrada mientras haya
referencias a ella en la tabla hija.

La Restricción CHECK

La restricción CHECK define la condición que cada fila debe satisfacer. La condición puede usar la misma
sintaxis que las condiciones de las consultas, pero no permite:

• Referencias a las pseudocolumnas CURRVAL, NEXTVAL, LEVEL o ROWNUM.


• Llamadas a las funciones SYSDATE, UID, USER o USERENV.
• Consultas que refieran a otros valores de otras filas.

Pueden ser definidas tanto a nivel de columna como a nivel de tabla. La sintaxis de la restricción puede
aplicarse a cualquier columna en la tabla, no solamente a la columna sobre la que se está definiendo.

La figura muestra un cuadro con los distintos tipos de restricciones desarrollados en este punto.

4.3 Inclusión de restricciones


4.3.5 La palabra clave CONSTRAINT

Las restricciones son generalmente creadas en el mismo momento que la tabla. Pueden ser agregadas a
la tabla después de su creación y también desactivadas temporalmente, lo cual será tratado más
adelante.

Nota: para visualizar las restricciones que tiene definidas sobre sus objetos puede consultar la vista del
diccionario de datos USER_CONSTRAINTS, y para obtener información sobre las columnas incluidas en
cada restricción USER_CONS_COLUMNS.
4.3 Inclusión de restricciones
4.3.6 Sintaxis para generar CONSTRAINT

Se puede agregar o eliminar una restricción para tablas existentes usando el comando ALTER TABLE
con la cláusula ADD o DROP.

Agregar una Restricción


Para agregar una restricción a una tabla existente se debe utilizar el comando ALTER TABLE con la
cláusula ADD.
El nombre de la restricción es opcional, aunque se lo recomienda. Si no se asigna un nombre a la
restricción, el sistema generará uno.

Eliminar una Restricción

Para eliminar una restricción, se puede identificar el nombre de la restricción desde las vistas
USER_CONSTRAINS y USER_CONS_COLUMNS del diccionario de datos. Luego se debe usar el
comando ALTER TABLE con la cláusula DROP. La opción CASCADE de la cláusula DROP causa que
también se elimine cualquier restricción dependiente.

Cuando se elimina una restricción de integridad, Oracle 10g Server ya no garantiza su cumplimiento y
además ya no se encuentra disponible en el diccionario de datos.

Recomendaciones

· Se puede agregar, eliminar, habilitar o deshabilitar una restricción, pero no se puede modificar su
estructura.

· Se puede agregar una restricción de NOT NULL a una columna existente usando la cláusula MODIFY
del comando ALTER TABLE.
4.3 Inclusión de restricciones
4.3.7 Desactivación – Activación de restricciones

Cuando se crea una restricción, a menos que se especifique lo contrario (usando la cláusula DISABLE),
queda automáticamente habilitada. Se pueden habilitar o deshabilitar restricciones sin eliminarlas o
recrearlas usando el comando ALTER TABLE con la cláusula ENABLE o DISABLE.
Al deshabilitar una restricción de tipo UNIQUE KEY o PRIMARY KEY, Oracle 10g Server elimina el
índice asociado a dicha restricción y cuando se vuelve a habilitar, el índice es creado nuevamente.
No se puede deshabilitar una UNIQUE KEY o PRIMARY KEY si existen FOREING KEY habilitadas que
le hacen referencia. Con la cláusula CASCADE se deshabilitan las restricciones de integridad
dependientes.

Las cláusulas ENABLE y DISABLE afectan solo a futuros datos que serán agregados o modificados en la
tabla. En cambio, las cláusulas VALIDATE y NOVALIDATE en el comando ALTER TABLE actúan sobre
los datos existentes.

Oracle 10g Server no permite operaciones DML en una tabla que contenga restricciones DISABLE
VALIDADTE. Esta es una forma rápida de poner una tabla en modo solo lectura.
4.3 Inclusión de restricciones
4.3.8 Verificación de restricciones diferidas

Diferir la validación de una restricción consiste en forzar el chequeo de las condiciones para que se
realicen al final de una transacción. De esta forma, una restricción puede ser diferida (deferred) o no
diferida (not deferred). Por otro lado, es posible especificar durante la creación de la restricción en la
cláusula CONSTRAINTS si la misma puede ser diferible (DEFERRABLE) o no diferible (NOT
DEFERRABLE). En este último caso, no se permitirá forzar el chequeo de manera diferida.

Las restricciones pueden ser agregadas, eliminadas, habilitadas o deshabilitadas pero no alteradas.
Específicamente no se puede alterar una restricción NOT DEFERRABLE para hacerla DEFERRABLE
.

Si una restricción es diferible, utilizando los comandos SET CONSTRAINT o ALTER SESION SET
CONSTRAINT es posible diferir la verificación de todas las restricciones en conjunto o de una restricción
en particular. Para diferir la verificación de todas las restricciones se utiliza la cláusula ALL. Para diferir la
verificación de una restricción particular se especifica el nombre de la misma.

SET CONSTRAINT cambia el comportamiento para la transacción en curso y ALTER SESION SET
CONSTRAINT para toda la sesión.

Las definiciones de las restricciones de integridad se realizan en la creación de tablas (CREATE TABLE)
o cuando se altera una tabla (ALTER TABLE).

Cabe destacar que, si una restricción causa una acción (por ejemplo, DELETE CASCADE) la acción es
siempre realizada como parte de la sentencia que la causa, independientemente si la restricción es
diferida o inmediata.
4.3 Inclusión de restricciones
4.3.9 AP: Manejo de todo tipo de restricciones

Laboratorio 4.3.9

Manejo de todo tipo de


restricciones

Aseguramiento de la integridad de
los datos y cumplimiento de
especificaciones de negocio
mediante la aplicación de
diferentes tipos de restricciones.

Duración Estimada: 20 min.

4.3 Inclusión de restricciones


4.3.10 AI: Restricciones Foreign Key

Seleccione la/s sentencia/s que usted consideren erróneas para generar claves ajenas (FOREING
KEY).
4.3 Inclusión de restricciones
4.3.11 AI: Restricciones Primary Key

Seleccione la sentencia que considere correcta para crear una clave primaria sobre la columna
PROD_ID en la tabla de PRODUCTOS.

4.3 Inclusión de restricciones


4.3.12 AI: Restricciones Check

Cuales de las siguientes sentencias son válidas para crear una restricción de tipo CHEK en la tabla de
PERSONAS.
4.3 Inclusión de restricciones
4.3.13 Síntesis
Restricciones son creadas en la base de datos para forzar el cumplimiento de reglas de negocio y para
especificar relaciones entre tablas. Una restricción NOT NULL puede ser especificada en la definición de
una columna y es utilizada para prevenir valores nulos (ausencia de datos). Restricciones de verificación
son utilizadas para verificar si los datos conforman o están de acuerdo con determinadas condiciones.
Restricciones de clave primaria identifican de forma unívoca cada fila de una tabla. Puede existir
solamente una clave primaria para una tabla, y las columnas en la clave primaria no pueden contener
valores nulos. Una clave única es similar a una clave primaria, pero puede existir más de una clave única
por tabla y sus columnas pueden contener valores nulos.

Restricciones pueden ser habilitadas o deshabilitadas utilizando la sentencia ALTER TABLE. Una
restricción puede estar en uno de los cuatro posibles estados: ENABLE VALIDATE, ENABLE
NOVALIDATE, DISABLE VALIDATE, y DISABLE NOVALIDATE. El estado por defecto es ENABLE
VALIDATE.
JURO POR DIOS…. QUE NO IMPORTA QUE OPCION ELIJAS TODAS DICE QUE ESTAN MAL…
LA RESPUESTA ES INSERT TABLE
MMMMMMMMMMMMMMMM me suena a que es COMMIT, SAVEPOINT y ROLLBACK
5 Objetos de base de datos

Una consulta SQL, restringiendo las filas resultantes, agrupando valores a nivel de grupos de datos,
realizando conversiones de datos, etc., puede ser almacenada en la base de datos. Dicha consulta
almacenada se denomina vista de datos, o simplemente vista. Una vez que ha sido definida una vista, la
misma puede ser tratada como una tabla más de la base de datos. Puede escribirse una sentencia
SELECT que acceda, restrinja, agrupe, etc., datos a partir de la vista. Cada vez que se ejecuta una
consulta sobre una vista, la consulta almacenada (o vista) es ejecutada. También es posible realizar
actualizaciones de datos sobre las vistas, pero esta operación puede no ser posible debido a la
complejidad de la vista en cuestión.

Además de tablas y vistas, una base de datos Oracle contiene otros tipos de objetos. Secuencias son
utilizadas para generar números secuencialmente. Sinónimos proveen alias (sobrenombres) a objetos.
Índices son utilizados para mejorar la performance de consultas SQL. Paquetes, procedimientos y
funciones, programados en PL/SQL o Java, también pueden ser almacenados en una base de datos
Oracle.

Por otro lado, Oracle provee varias formas de controlar el acceso de usuarios. Existen diferentes
métodos de autenticación y una cuenta de usuario está definida por un conjunto de atributos que controlan
la forma en la cual el usuario se conecta e interactúa con la base de datos. Uno de los mecanismos para
controlar el acceso de usuarios es a través de la asignación de privilegios. Otorgando y revocando
privilegios es posible especificar las tareas que un usuario determinado puede ejecutar sobre los objetos de
la base de datos. La definición de perfiles permite controlar cómo se utilizan los recursos del sistema.

5.1 Creación de vistas

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al


Material del Estudiante (Kit).
5.1 Creación de vistas
5.1.1 Objetivos
Una vista es una representación lógica de datos a partir de una o más tablas o vistas de base. Una vista
puede ser pensada como una consulta almacenada en la base de datos. Oracle 10g Server permite crear
restricciones sobre las vistas y restringir las operaciones que pueden ser realizadas sobre una vista. Este
tema discute el uso de vistas, cómo crear y gestionar vistas, y cómo realizar consultas del tipo n-
principales en Oracle 10g utilizando vistas en línea.
5.1 Creación de vistas
5.1.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
5.1 Creación de vistas
5.1.3 Descripción de las VISTAS

Una vista es una presentación “hecha a medida” de los datos en una o más tablas. Una vista también
puede ser pensada como una “consulta almacenada”.
Una vista es una “tabla virtual” en la base de datos cuyos contenidos están definidos por una consulta.
Las vistas realmente no contienen o almacenan datos; en lugar de ello, ellas derivan sus datos de tablas
sobre las cuales están basadas, referidas como tablas base de las vistas. Las tablas base pueden, a su
vez, ser tablas o vistas.
Como las tablas, las vistas se pueden consultar, actualizar, insertar en ellas o borrar de ellas, con
restricciones. Todas las operaciones efectuadas sobre una vista en realidad afectan a las tablas base de
la vista.

Las vistas que involucran la unión (una sentencia SELECT que selecciona datos de múltiples tablas) de
dos o más tablas sólo pueden ser actualizadas bajo ciertas condiciones.
5.1 Creación de vistas
5.1.4 Beneficios de las vistas

Las vistas generalmente se utilizan para proveer un nivel de seguridad de tabla adicional restringiendo el
acceso a un conjunto predeterminado de filas y columnas de una tabla. Por ejemplo, una vista de una
tabla puede ser creada tal que las columnas con datos sensitivos (por ejemplo, información sobre el
salario) no sean incluidas en la definición de la vista.

Además ocultan la complejidad de los datos. Por ejemplo, una única vista puede combinar doce tablas de
ventas mensuales para proveer un año de datos para realizar análisis y reportes. Una única vista puede
ser utilizada para crear una unión, que es una muestra de columnas o filas relacionadas en múltiples
tablas. Sin embargo, la vista oculta el hecho de que estos datos realmente provienen de varias tablas.

Simplifican los comandos para el usuario. Por ejemplo, las vistas permiten a los usuarios seleccionar
información de múltiples tablas sin requerir que los usuarios conozcan cómo realizar una subconsulta de
correlación.

Presentan los datos en una perspectiva diferente de la de la tabla base. Por ejemplo, las vistas proveen
un significado a las columnas “renombradas” sin afectar las tablas en las cuales la vista está basada.

Permiten a los desarrolladores crear aplicaciones utilizando vistas, lo cual les minimiza el impacto ante
cambios en el origen de los datos o en la forma en la cual se obtienen, teniendo que solo modificar la
definición de la vista.

Almacenan consultas complejas. Por ejemplo, una consulta podría ejecutar cálculos extensos con
información de una tabla. Grabando esta consulta como una vista, los cálculos son realizados sólo
cuando la vista es consultada.

Hay dos clasificaciones para las vistas: simples y complejas La diferencia básica tiene que ver con las
operaciones DML (INSERT, UPDATE y DELETE).

Una vista simple es la que:

• Deriva datos de una sola tabla


• No contiene funciones ni grupos de datos
• Puede realizar operaciones DML a través de la vista

Una vista compleja es la que:

• Deriva datos de muchas tablas


• Contiene funciones o grupos de datos
• No siempre permite operaciones DML a través de la vista
5.1 Creación de vistas
5.1.5 Sintaxis para la creación de las vistas

Es posible crear una vista embebiendo una subconsulta en la sentencia CREATE VIEW.

Para modificar una vista se debe utilizar la cláusula CREATE OR REPLACE en la sentencia CREATE
VIEW.

Puede controlar los nombres de columna mediante la inclusión de alias de columna en la subconsulta.

Con la opción OR REPLACE, se puede crear una vista incluso si ya existe una con el mismo nombre, de
modo que sustituirá a la versión antigua de la vista para su propietario. Esto significa que la vista se
puede modificar sin tener que borrar, volver a crear y volver a otorgar privilegios de objeto.
5.1 Creación de vistas
5.1.6 Consulta de una vista

Una vez creada una vista, puede visualizar los datos utilizando la sentencia SELECT de la misma forma
que lo hace con las tablas.
5.1 Creación de vistas
5.1.7 Cláusula : WITH CHECK OPTION

Existen dos clasificaciones para las vistas: simples y complejasPara asegurarse que cuando se agregan
o actualizan datos en una vista simple, los mismos puedan ser consultados a través de la vista, se utiliza
la cláusula WITH CHECK OPTION.
La diferencia tiene que ver con las operaciones DML (INSERT, UPDATE y DELETE).
• Una vista simple es la que deriva datos de una sola tabla.
• Una vista compleja es la que deriva datos de muchas tablas.

Para asegurarse que cuando se agregan o actualizan datos en una vista simple, los mismos puedan ser
consultados a través de la vista, se utiliza la cláusula WITH CHECK OPTION.
5.1.7 Cláusula : WITH CHECK OPTION
5.1.7.1 Recuperación de Datos de una Vista
Puede extraer datos de una vista del mismo modo que de una tabla. Puede mostrar el contenido
de toda la vista o sólo filas y columnas específicas.

5.1.7 Cláusula : WITH CHECK OPTION


5.1.7.2 Creación de Vistas Complejas
Puede ver la estructura de la vista mediante el comando DESCRIBE de iSQL*Plus. Muestre el
contenido de la vista emitiendo una sentencia SELECT.

5.1.7 Cláusula : WITH CHECK OPTION


5.1.7.3 Denegación de Operaciones DML
Puede estar seguro de no producir operaciones DML en la vista creándola con la opción WITH
READ ONLY.

Si intento eliminar una fila de una vista con restricción de sólo lectura producirá un error.

5.1 Creación de vistas


5.1.8 Cláusula : WITH READ ONLY

Para asegurar que no ocurran operaciones DML sobre una vista, ésta debe ser creada con la opción
WITH READ ONLY.
5.1 Creación de vistas
5.1.9 Eliminación de Vistas

Puede utilizar la sentencia DROP VIEW para eliminar una vista. La sentencia elimina la definición de
vista de la base de datos. Borrar vistas no afecta a las tablas en las que se base la vista.

Las vistas u otras aplicaciones basadas en vistas suprimidas se convierten en no válidas. Sólo puede
eliminar una tabla su creador o un usuario con el privilegio DROP
ANY VIEW.
5.1 Creación de vistas
5.1.10 AP: Utilización de los N-Principales

Laboratorio 5.1.10

Utilización de los N-Principales

Ejercitar la escritura de consultas


para realizar análisis N-
Principales, y comprender el
mecanismo de resolución de
análisis N-Principales.

Duración Estimada: 30 min.

5.1 Creación de vistas


5.1.11 AI: Generación de vistas con una tabla

Lea con atención las sintaxis de creación de vistas y considerando el conjunto los enunciados
presentados, una con flechas según corresponda.

5.1 Creación de vistas


5.1.12 AI: Generación de vistas con más de una tabla

En base a la sentencia de creación de vista presentada, responda si las siguientes afirmaciones son
verdaderas o falsas.
5.1 Creación de vistas
5.1.13 Síntesis
Una vista es una representación de datos hecha a medida a partir de una o más tablas o vistas de base.
La vista es una consulta almacenada. Vistas pueden ser utilizadas para presentar una perspectiva
diferente de los datos, para limitar el acceso a datos, o para ocultar una consulta compleja.

Vistas pueden ser utilizadas de la misma en que se usan tablas en consultas. Es posible actualizar,
eliminar e insertar datos en las tablas de base a partir de una vista (con restricciones), pero la operación
puede afectar sólo una tabla a la vez si existe más de una tabla en la definición de la vista.

Para modificar la definición de una vista, se debe recrear la vista utilizando la sentencia CREATE OR
REPLACE. Para recompilar una vista, agregar o eliminar restricciones, se utiliza la sentencia ALTER
VIEW.

Restricciones declarativas pueden ser creadas sobre vistas; las restricciones no son impuestas. Los tipos
de restricciones válidos son: de clave primaria, de clave única y de clave foránea.

Una vista en línea es una consulta que puede ser utilizada en lugar de una tabla o vista en la cláusula
FROM de una consulta. Utilizando la cláusula ORDER BY en vistas (y en vistas en línea), es posible
ejecutar análisis del tipo n-principales.
5.2 Otros objetos de base de datos

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al


Material del Estudiante (Kit).
5.2 Otros objetos de base de datos
5.2.1 Objetivos
Una base de datos Oracle puede contener mucho más que simples tablas y vistas. Secuencias pueden
ser utilizadas para generar claves artificiales. Sinónimos proveen alias (sobrenombres) a objetos. Varios
tipos de índices pueden ser utilizados para mejorar la performance de consultas SQL. Para ejecutar
tareas de administración de base de datos es necesario conocer cómo utilizar paquetes, procedimientos y
funciones.

Un objeto secuencia en una base de datos Oracle es un generador de números secuenciales con
nombre. Secuencias son frecuentemente utilizadas para generar claves artificiales o para ordenar filas
que de otra manera no poseen orden. De la misma forma que ocurre para restricciones, secuencias sólo
existen en el diccionario de datos.

Un objeto sinónimo en una base de datos Oracle es un alias (sobrenombre) a otro objeto de base de
datos. Un sinónimo público está disponible para todos los usuarios, mientras que un sinónimo privado
está disponible sólo para el propietario del mismo o para los usuarios a quienes el propietario otorga
privilegios.

Índices son estructuras de datos que pueden ofrecer mejoras de performance, por sobre el recorrido
completo de tablas, al obtener filas específicas de datos. No obstante, índices no siempre mejoran la
performance.

Este tema abarca cómo crear, modificar y eliminar secuencias, sinónimos e índices, y cómo utilizar el
diccionario de datos para realizar tareas de administración de base de datos relacionadas a estos tipos
de objetos. Además, dicho tema revisa las tecnologías de indexación B-tree y bitmap (mapa de bits), y
repasa cuándo y cómo índices pueden mejorar performance.

5.2 Otros objetos de base de datos


5.2.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
5.2 Otros objetos de base de datos
5.2.3 Descripción de Secuencias – Sintaxis

Una secuencia es un objeto de la base de datos creado por un usuario, y puede ser compartido por varios
de ellos. Se puede utilizar un generador de secuencia para producir automáticamente una secuencia de
números enteros únicos para las filas de una tabla.

Los números de una secuencia se almacenan y generan independientemente de las tablas. De esta
manera, la misma secuencia puede ser utilizada por varias tablas.

Cuando se genera un número de secuencia, se incrementa la secuencia independientemente de que la


transacción se confirme o se descarte.

En la figura , se muestra la sintaxis de lo expresado anteriormente.


Si el valor INCREMENT BY es negativo, la secuencia descenderá. Adicionalmente, NOMAXVALUE
entonces especifica un valor máximo de –1 y NOMINVALUE tiene un valor mínimo de –(1026).
Si los valores de la secuencia se mantienen en memoria principal (en la cache), se perderán ante una
falla o caída del sistema.
Si se especifica la opción NOCYCLE, cualquier intento de generar un número de secuencia, una vez
alcanzado el valor máximo, causará un error.

Un uso muy común de las secuencias es para crear valores de clave primaria, ya que el mismo debe ser
único para cada fila.
La secuencia se genera e incrementa (o decrementa) por una rutina interna de Oracle 10g.
Son útiles en ambientes multiusuario porque reducen el tiempo de ejecución de una transacción,
fundamentalmente cuando las sentencias de dos transacciones deben generar números secuenciales al
mismo tiempo. El generador de secuencias elimina la “serialización” en la generación de estos números.

Una vez que una sentencia en una sesión del usuario genera un número de secuencia, el número de
secuencia generado está disponible solo en esa sesión. Cada usuario que referencia una secuencia tiene
acceso a sus números de secuencia propios (no los que puedan haber generado otros usuarios con la
misma secuencia).
Para eliminar una secuencia, se utiliza el comando DROP SEQUENCE .

Consulta de los Parámetros de una Secuencia

Una vez que se ha creado la secuencia, la misma es documentada en el diccionario de datos. Para
consultar los parámetros de la secuencia, se los puede seleccionar de la tabla USER_SEQUENCES del
diccionario de datos.
5.2 Otros objetos de base de datos
5.2.4 Utilización de secuencias

Una vez creada la secuencia, se la puede usar para generar números secuenciales que se utilizarán en las tablas.
Para hacer referencia a los valores de la secuencia, se utilizan las pseudocolumnas NEXTVAL y CURRVAL.

Pseudocolumnas NEXTVAL y CURRVAL

La pseudocolumna NEXTVAL se utiliza para obtener el próximo número de una secuencia específica. Se debe
cualificar NEXTVAL con el nombre de la secuencia. Cuando se referencia a secuencia.NEXTVAL, un nuevo número
de secuencia se genera y el número actual se coloca en CURRVAL.

La pseudocolumna CURRVAL se utiliza para hacer referencia al número de secuencia recientemente generado.
NEXTVAL debe ser usado para generar un número de secuencia en la sesión actual del usuario, antes de poder hacer
referencia a CURRVAL. Se debe cualificar a CURRVAL con el nombre de la secuencia. Cuando se referencia a
secuencia.CURRVAL, se obtiene el último valor devuelto al proceso del usuario. -
5.2.4 Utilización de secuencias
5.2.4.1 Caché de Valores de Secuencia
Caché de Valores de Secuencia

Puede guardar en caché, secuencias de la memoria para otorgar un acceso más rápido a esos
valores de secuencia. El caché se rellena la primera ver que hace referencia a la secuencia. Cada
solicitud del siguiente valor de secuencia se recupera de la secuencia almacenada en caché.

Modificación de Secuencia

Si llega al límite MAXVALUE para la secuencia, no se asigna ningún valor adicional y recibirá un error
que indicará que la secuencia excede el valor MAXVALUE. Para continuar utilizando la secuencia, la
puede modificar mediante la sentencia ALTER SEQUENCE.
5.2 Otros objetos de base de datos
5.2.5 Descripción de índices – Sintaxis

Un índice es un objeto de la base de datos que contiene una entrada por cada valor que aparece en las
columnas indexadas de la tabla y permite acelerar la recuperación de filas. Si no se tiene un índice sobre
la(s) columna(s), entonces se debe hacer un barrido total de la tabla para una búsqueda.

Los índices reducen la necesidad de E/S de disco mediante el uso de una estructura Árbol B (B*Tree)
indexada para ubicar rápidamente a los datos. El índice es automáticamente usado y mantenido
por Oracle 10g Server. Una vez que un índice es creado, no se requiere actividad directa del usuario.
La presencia de muchos índices sobre una tabla disminuye la performance de la tabla cuando se
actualiza, inserta o borra porque tienen que actualizarse los índices asociados con las tablas.

Los índices son lógica y físicamente independientes de la tabla sobre la que se aplican. Esto significa
que pueden ser creados o eliminados en cualquier momento y no tienen efectos sobre la tabla base u
otros índices.

Un índice es una estructura opcional que es independiente de la estructura de la tabla. Cada índice se
compone de valores de las columnas que se indexan, y punteros (o ROWID) a las filas que contienen
esos valores. Cada puntero conduce directamente a la fila apropiada, en consecuencia se evita el barrido
total de la tabla.

Árbol B (B*Tree)

Oracle 10g Server usa una estructura de índice de tipo árbol B balanceado. Esta es una estructura de
búsqueda binaria, autobalanceada para igualar los tiempos de acceso para todas las filas. Es un método
eficiente que asegura que el tiempo de acceso a un valor específico sea más o menos el mismo ya sea
que la fila se encuentre al principio, al medio o al final de la tabla.

Cada índice que Oracle 10g Server construye consiste de un número de páginas (o ramas) de
almacenamiento organizadas en una estructura de árbol. Cada página (o rama) contiene una serie de
valores de claves y punteros a las páginas (o ramas) inferiores en la estructura hasta que eventualmente
el valor de la clave indica la ubicación del dato propiamente dicho. El identificador de la ubicación a nivel
de la base de datos se denomina ROWID.

Para crear un índice sobre una o más columnas, se utiliza el comando CREATE INDEX. -
5.2 Otros objetos de base de datos
5.2.6 Índices creados automáticamente

Se pueden crear dos tipos de índices . Un tipo es un índice único o unique. Oracle 10g Sever crea
automáticamente este tipo de índice cuando en una tabla se definen una o más columnas que forman
parte de una restricción PRIMARY KEY o UNIQUE. El índice toma el mismo nombre que la restricción.

El otro tipo de índice que un usuario puede crear es un índice no único (non-unique). Por ejemplo, se
puede crear un índice de columna FOREIGN KEY para una operación de unión en una consulta que
acelere la respuesta.

Los tipos de índices único y no único son mutuamente excluyentes, pero pueden estar formados por una
o más columnas. Por ejemplo, se puede crear un índice único, concatenado.
El orden de las columnas en un índice concatenado es importante. El Servidor lee las columnas de
izquierda a derecha cuando averigua la eficiencia para elegir el índice.

La decisión de crear índices es una decisión global de alto nivel. Con frecuencia, la creación y el
mantenimiento de índices es una tarea del
DBA.
5.2 Otros objetos de base de datos
5.2.7 Descripción de Sinónimos – Sintaxis

Crear un Sinónimo para un Objeto

Para referirse a una tabla de otro usuario, se necesita prefijar el nombre de la tabla con el nombre del
usuario que lo creó seguido por un punto. Crear un sinónimo elimina la necesidad de calificar el nombre
del objeto con el esquema y provee un nombre alternativo para una tabla, vista, secuencia, procedimiento
u otros objetos. Este método puede ser especialmente útil con objetos con nombres largos, tales como
vistas. No requiere almacenamiento, solo un lugar en la definición en el diccionario de datos.
Con la utilización de sinónimos se puede lograr:

• enmascarar el nombre del dueño de un objeto


• simplificar las sentencias SQL para los usuarios de datos
• en aplicaciones distribuidas dar transparencia a la localización de las bases de datos
Se pueden crear sinónimos públicos y privados.

Una vez que se ha creado un sinónimo, el mismo es documentado en el diccionario de datos. Para
información a cerca de los sinónimos creados, se los puede seleccionar de la tabla USER_SYNONYMS
del diccionario de datos.

Eliminar un Sinónimo

Para eliminar un sinónimo, se utiliza el comando DROP SYNONYM. Solamente el DBA puede eliminar
un sinónimo público.

Nota: En Oracle 10g Server, el DBA puede específicamente otorgar el privilegio CREATE PUBLIC
SYNONYM a cualquier usuario, permitiéndole al usuario crear sinónimos públicos.
5.2 Otros objetos de base de datos
5.2.8 AP: Manejo de secuencias

Laboratorio 5.2.8

Manejo de secuencias.

Ejercitar la creación y eliminación


de secuencias. Utilización de
secuencias en la creación de
nuevos registros en otras tablas.

Duración Estimada: 30 min.


5.2 Otros objetos de base de datos
5.2.9 AP: Manejo de sinónimos
Practica

Laboratorio 5.2.9

Manejo de Sinónimos

Ejercitar la creación y eliminación


de sinónimos. Utilización de
sinónimos creados para la
consulta de datos.

Duración Estimada: 20 min.

5.2 Otros objetos de base de datos


5.2.10 AI: Mayor velocidad con los Índices

Teniendo en cuenta los motivos por el cual es posible decidir si es conveniente o no crear un índice sobre
ciertas columnas, responda si son verdaderas o falsas las siguientes afirmaciones.

5.2 Otros objetos de base de datos


5.2.11 Síntesis
Este tema abordó secuencias, sinónimos e índices.

Secuencias son generadores de números, y es posible utilizarlas junto a las palabras clave CURRVAL y
NEXTVAL.

Un sinónimo es un mecanismo para darle un sobrenombre o alias a otro objeto, ya sea que dicho objeto
sea local o remoto accesible a través de un enlace de base de datos. Los sinónimos pueden estar
disponibles en forma global (públicos), o restringidos a usuarios limitados (privados).

Los dos tipos principales de índices son los índices B-tree y bitmap. En este tema se profundizó sobre
cuándo dichos índices pueden mejorar la performance de una consulta, y también que los mismos
pueden empeorar las operaciones INSERT, DELETE y UPDATE.
5.3 Control de acceso de usuarios

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al


Material del Estudiante (Kit).
5.3 Control de acceso de usuarios
5.3.1 Objetivos
Oracle 10g Server provee varias formas de controlar el acceso de usuarios. Cuando se crea un usuario,
es posible especificar el método de autenticación utilizado así como otros atributos que controlan la forma
en que el usuario accede e interactúa con la base de datos. También es posible modificar cuentas de
usuario para agregar o cambiar atributos.

La forma más común de controlar el acceso de usuarios es a través de privilegios. Oracle 10g Server
incluye privilegios de objeto, privilegios de sistema, y privilegios de roles. Otorgando y revocando
privilegios es posible especificar las tareas que un usuario determinado puede ejecutar sobre los objetos
de la base de datos. Otro método de controlar cómo usuarios utilizan recursos del sistema es a través de
perfiles.

Este tema cubre cómo crear y modificar cuentas de usuario, cómo permitir o prevenir cambios utilizando
privilegios y cómo gestionar la asignación de privilegios utilizando roles. Además, dicho tema abarca
cómo asignar perfiles.

5.3 Control de acceso de usuarios


5.3.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
5.3 Control de acceso de usuarios
5.3.3 Descripción de Privilegios

Privilegios son los derechos para ejecutar sentencias SQL particulares. El administrador de la base de
datos es un usuario de alto nivel con la capacidad para otorgarle permisos a los usuarios para acceder a
la base de datos y sus objetos. Los usuarios requieren privilegios del sistema para obtener el acceso a
la base de datos y privilegios de objetos para manipular el contenido de los objetos en la base de datos.
A los usuarios, además se les puede dar el privilegio de otorgar privilegios adicionales a otros usuarios o
a roles , que son grupos de privilegios relacionados que tienen un nombre.
Privilegios del Sistema

Un privilegio del sistema es el derecho a realizar una acción particular, o realizar una acción sobre
cualquier (“any”) objeto de un tipo particular. Por ejemplo, los privilegios para crear tablespaces o para
borrar filas de cualquier tabla de una base de datos son privilegios del sistema.

Existen más de ochenta privilegios del sistema disponibles para los usuarios y roles, dentro de los cuales
podemos mencionar a CREATE TABLE, CREATE ANY TABLE, SELECT ANY TABLE, ALTER SESSION
entre otros. Los privilegios del sistema son otorgados generalmente por el administrador del sistema.

Privilegios de Objetos

Un privilegio sobre un objeto del schema es un derecho para efectuar una acción particular (INSER,
UPDATE, REFERENCES, EXECUTE) sobre una tabla, vista, secuencia, procedimiento, función o
paquete. Cada tipo de objeto tiene un determinado juego de privilegios otorgables.

Algunos otros objetos como clusters, índices, triggers y vínculos de base de datos (database links) no se
asocian a privilegios sobre los objetos, sino que son controlados por medio de privilegios del sistema.

Un objeto del schema y su sinónimo son equivalentes en cuanto a los privilegios, esto implica que en
cuanto a los privilegios referenciar el objeto o su sinónimo es lo mismo.

Un usuario posee automáticamente todos los privilegios sobre los objetos que se encuentran en su
schema. Por lo tanto, un usuario puede garantizar cualquier privilegio sobre estos objetos a cualquier otro
usuario o rol. Si la asignación de privilegios incluye GRANT OPTION, el usuario o rol a quien se le asigno
esta opción, puede a su vez asignar estos privilegios a otros usuarios.
5.3 Control de acceso de usuarios
5.3.4 Creación de Usuarios – Sintaxis

Un usuario es un nombre definido en la base de datos que se puede conectar y acceder a los objetos.
Un schema es un conjunto nominado de objetos tales como tablas, vistas, clusters, procedimientos y
paquetes asociados con un usuario particular.
Cuando se crea un usuario se crea el schema correspondiente con el mismo nombre. Por default, una
vez que el usuario se conecta con la base de datos, el usuario tiene acceso a todos los objetos
contenidos en el schema correspondiente. El usuario se asocia con el schema del mismo nombre, por lo
tanto, los términos usuario y schema se usan para referirse a lo mismo.

El DBA crea un nuevo usuario en Oracle 10g Server asignándole una cantidad de privilegios al

mismo. Esos privilegios determinan qué puede hacer el usuario a nivel de la base de datos. El DBA

crea al usuario ejecutando el comando CREATE USER . El usuario no tiene privilegios del sistema.

Una vez creado el usuario, puede asignarle los privilegios.

Cada base de datos tiene un usuario de grupo llamado PUBLIC. El usuario PUBLIC provee el acceso

público a objetos específicos del schema (tablas, vistas, etc.) y provee a todos los usuarios con

privilegios del sistema específicos. Todo usuario pertenece automáticamente al grupo de usuarios

PUBLIC.

Como miembros de PUBLIC, los usuarios pueden ver (seleccionar de) todas las tablas del diccionario

de datos prefijadas como USER and ALL. Además, un usuario puede garantizar un privilegio o un rol a

PUBLIC.

5.3 Control de acceso de usuarios


5.3.5 Otorgar privilegios – Sintaxis

Otorgar Privilegios del Sistema

El DBA usa el comando GRANT para asignarle privilegios del sistema al usuario. Una vez que se le
otorgan los privilegios al usuario, éste puede usarlos inmediatamente.

Otorgar Privilegios Sobre un Objeto

El DBA puede permitir a los usuarios realizar una acción particular sobre una tabla, vista, secuencia o
procedimiento almacenado otorgándole privilegios sobre los objetos. El propietario de un objeto tiene
todos los privilegios sobre el mismo. Para que un usuario le otorgue acceso a sus objetos a otro usuario,
debe ejecutar el comando GRANT.

Un privilegio otorgado con WITH GRANT OPTION puede ser transmitido a otros usuarios y roles por el
depositario del privilegio. Los privilegios otorgados con WITH GRANT OPTION son quitados cuando se
le quitan a quien los pasó u otorgó.

Nota: Si a un usuario se le otorga un privilegio con WITH GRANT OPTION, entonces ese usuario
también puede otorgar ese privilegio con WITH GRANT OPTION, de tal modo que una larga cadena de
concesiones es posible, pero no se permiten concesiones circulares. Si un propietario revoca un
privilegio a un usuario que además ha otorgado ese privilegio a otros usuarios, entonces el REVOKE
quita todos los privilegios otorgados en cascada.

Por ejemplo, sin un usuario A otorga el privilegio SELECT sobre la tabla Ventas al usuario B incluyendo la
opción WITH GRANT OPTION, entonces el usuario B puede otorgar el mismo privilegio al usuario C con
la misma opción, y lo mismo puede hacer el usuario C con el usuario D. Si el usuario A le quita el
privilegio al usuario B o el usuario B es eliminado, entonces los usuarios C y D pierden los privilegios
sobre la tabla Ventas concedidos por el usuario B. -
5.3 Control de acceso de usuarios
5.3.6 Quitar privilegios – Sintaxis

Para quitar los privilegios otorgados a otros usuarios se utiliza el comando REVOKE . Cuando se
utiliza el comando REVOKE, los privilegios que uno especifica pueden ser quitados a los usuarios que se
nombren y a todos los demás usuarios a quienes se les haya otorgado privilegios.

5.3 Control de acceso de usuarios


5.3.7 Descripción de roles – Sintaxis

Oracle 10g Server tiene un modo fácil y controlado de administrar privilegios a través de roles. En

general se emplean para asignar los privilegios relacionados con los usuarios finales de las

aplicaciones de un sistema o para asignar roles a otros roles. En general no se emplean para asignar

privilegios a los que desarrollan las aplicaciones, estos privilegios necesitan asignarse directamente.

Un rol es un grupo de privilegios relacionados que se le pueden otorgar a los usuarios y que lleva un
nombre. Esto hace que otorgar y quitar privilegios sea fácil de realizar y mantener.
Un usuario puede tener varios roles y a varios usuarios se les puede asignar el mismo rol. Los roles se
crean para una aplicación de la base de datos.

Primero, el DBA debe crear el rol . Luego, puede asignar privilegios al rol y usuarios al rol. Una vez
creado un rol, el DBA puede usar el comando GRANT para asignar usuarios al rol como así también
asignar privilegios para el rol.

Los roles de la base de datos tienen la siguiente funcionalidad:

• un rol puede tener privilegios del sistema y privilegios de objetos del schema
• un rol se puede asignar a otros roles. No obstante un rol no se puede autorizar a sí mismo ni
tampoco de manera circular
• a cualquier usuario de la base de datos se le puede asignar cualquier rol.
• un rol asignado a un usuario se puede habilitar o inhabilitar en cualquier momento.
• un rol garantizado indirectamente (un rol asignado a un rol) puede ser explícitamente habilitado o
inhabilitado al usuario. No obstante para habilitar un rol que contiene otros roles, los roles
contenidos se habilitan implícitamente habilitando el rol que los contiene.

5.3 Control de acceso de usuarios


5.3.8 Tabla de privilegios por Objeto

Los privilegios de objetos varían de un objeto a otro. En la figura , se muestra un resumen de los
privilegios que se pueden otorgar sobre algunos tipos de objetos.

Nota: procedimiento se refiere a procedimientos y funciones aislados y a construcciones package


públicas. Los privilegios INDEX y REFERENCES no se pueden otorgar a un rol.
Cada objeto tiene un conjunto particular de privilegios otorgables. UPDATE, REFERENCES e INSERT se
pueden restringir especificando un subconjunto específico de columnas modificables. Un SELECT se
puede restringir especificando un subconjunto de columnas seleccionables. El privilegio que se otorga
sobre un sinónimo se traslada a la tabla base referenciada por ese sinónimo.
5.3 Control de acceso de usuarios
5.3.9 Descripción de enlaces de Bases de datos remotas

Un enlace de base de datos es un objeto del esquema de una base de datos local que permite tener
acceso a objetos que se encuentren en una base de datos remota. La base de datos remota no
necesariamente debe ser Oracle. Una vez creado un enlace de base de datos, se puede utilizar para
referenciar a las tablas y vistas sobre la base de datos remota anexando @dblink al nombre de la tabla o
vista en una sentencia SQL.
5.3 Control de acceso de usuarios
5.3.10 AP: Manejo de privilegios

Laboratorio 5.3.10

Manejo de Privilegios.

Ejercitar la utilización de
privilegios y roles para controlar el
acceso de los usuarios.

Duración Estimada: 50 min.

5.3 Control de acceso de usuarios


5.3.11 AI: Gestión de usuarios y privilegios

Arrastre las opciones que crea correctas para completar las siguientes sentencias.
5.3 Control de acceso de usuarios
5.3.12 Síntesis
En este tema se profundizó sobre cómo crear y gestionar cuentas de usuario, incluyendo la configuración
de varios atributos sobre dichas cuentas. Seguidamente, se explicó acerca de privilegios de objeto y de
sistema, y sobre cómo gestionar estos privilegios a través del uso de roles. Se aprendió cómo asignar y
cómo quitar privilegios utilizando las sentencias GRANT y REVOKE. También se revisaron muchas de las
vistas del diccionario de datos que proveen información sobre privilegios.

Finalmente, este tema cubrió cómo gestionar grupos de usuario con perfiles. Perfiles permiten la
configuración de recursos del sistema con el objetivo de limitar el consumo de recursos para
determinados grupos de usuarios, así como la configuración de recursos relacionados a claves de acceso
para gestionar las reglas de utilización de claves de acceso.
5.4 Taller SQL

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al


Material del Estudiante (Kit).
5.4 Taller SQL
5.4.1 Objetivos
En el capítulo 14 del Kit de Estudiante se presenta un Taller SQL que aborda los temas tratados hasta
el momento en el curso Introducción a Oracle9i: SQL.
El objetivo principal de este taller consiste en crear un juego de tablas para una aplicación de video,
realizando las actividades que se presentan en la figura .
5.4 Taller SQL
5.4.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las preguntas
de iniciación. Si desea, puede desplegar su respuesta.
5.4 Taller SQL
5.4.3 Secuencia de trabajo para el taller

En la figura se muestra un resumen de items de este Material Complementario asociados a cada


etapa del Taller SQL, permitiendo al estudiante repasar conceptos y sintaxis de cláusulas SQL
necesarias para realizar la actividad correspondiente.
5.4 Taller SQL
5.4.4 Síntesis
Este tema abordó la implementación de un modelo de datos correspondiente a una aplicación de alquiler
de videos. Primeramente, se crearon las tablas del modelo, se definieron relaciones entre tablas, y se
verificaron los objetos creados contra el diccionario de datos. Seguidamente, se crearon secuencias, las
que fueron utilizadas en la inserción de datos a las tablas.

Una vez que el modelo quedó definido y cargado con datos, se definió una vista personalizada sobre
dicho modelo. Como paso siguiente, se actualizaron datos de negocio, y se modificó la definición de una
tabla de dominio. Por último, se presentaron los datos con formato de reporte de impresión.
6 Funciones avanzadas

Adicionalmente a soportar el estándar SQL en su totalidad, Oracle 10g Server incluye múltiples
extensiones que facilitan la ejecución de operaciones complejas y mejoran la performance en la
manipulación de datos.

Oracle 10gServer soporta operadores para trabajar sobre conjuntos de filas, dichos operadores se
denominan operadores SET. A través de operadores SET es posible llevar a cabo operaciones de unión,
intersección y diferencia de conjuntos.

Otra funcionalidad brindada por Oracle 10g es la posibilidad de manipular zonas horarias en datos tipo
fecha, con precisión hasta fracciones de segundos.

Por otro lado, el análisis de datos en línea, realizado mayoritariamente sobre almacenes de datos, requiere
la confección de reportes de datos incluyendo subtotales a diferentes niveles de agrupamiento. Uno de los
tipos más comunes de reportes en análisis de datos en línea son los reportes de tabulación cruzada o de
doble entrada. Para realizar este tipo de análisis, Oracle 10g Server incluye extensiones a la cláusula
GROUP BY que facilitan la escritura de sentencias SELECT.

Una práctica común en la manipulación de datos, es la división de una consulta general en partes menores,
o subconsulas. Dicha práctica facilita la legibilidad y la resolución de consultas complejas.

Frecuentemente, el dominio del problema incluye relaciones recursivas sobre una misma tabla. Esta
autorelación define una estructura jerárquica entre filas pertenecientes a una misma tabla. Oracle
10g Server incluye cláusulas especiales para la manipulación de datos almacenados jerárquicamente en
una tabla plana.

Otras extensiones provistas por Oracle 10g Server son la creación de tablas externas, para acceder a
datos almacenados fuera de la base de datos, y la inserción de múltiples tablas, para insertar datos en
varias tablas de manera condicional a través de una única sentencia.

6.1 Uso de operadores SET

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas o
unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al Material


del Estudiante (Kit).
6.1 Uso de operadores SET
6.1.1 Objetivos
Oracle 10gServer posee operadores especiales para trabajar con conjuntos de filas. Sobre dos conjuntos de
filas determinados, si son compatibles, es posible realizar operaciones de unión, intersección y diferencia de
conjuntos. Los operadores SET (operadores de conjunto) soportados por Oracle 10g Server son: UNION y
UNION ALL para realizar operaciones de unión de conjuntos, INTERSECT para realizar intersección de
conjuntos, y MINUS para realizar diferencia de conjuntos.

Los operadores de unión de conjuntos se diferencian en el tratamiento de filas duplicadas: UNION no incluye
filas duplicadas en el resultado, mientras que UNION ALL sí. Este tema aborda operadores SET, y su
precedencia en consultas compuestas por más de un operador SET.

6.1 Uso de operadores SET


6.1.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
6.1 Uso de operadores SET
6.1.3 Operadores SET

Los operadores SET pueden ser utilizados para seleccionar datos a partir de múltiples tablas. Operadores
SET básicamente combinan el resultado de dos consultas en uno. La consulta que utiliza un operador
SET es denominada consulta compuesta .

Todos los operadores SET poseen igual precedencia. Cuando múltiples operadores SET son utilizados
en la misma consulta, los mismos son evaluados de izquierda a derecha, a menos que se especifique un
orden diferente a través de paréntesis.

Los tipos de dato de las columnas resultantes, así como el número de columnas, debe coincidir en ambas
consultas. Los nombres de columnas, o alias, de la primer sentencia SELECT son utilizados como
nombres de columna en el conjunto resultado. Los conjuntos de datos mostrados en la figura poseen
el mismo número de columnas y en el orden correspondiente, de forma que los mismos pueden ser
manipulados en conjunto a través de operadores SET.
UNION

El operador UNION es utilizado para retornar filas ya sea de la primera como de la segunda consulta, sin
duplicar las filas en el resultado. En la figura , notar que, no obstante la suma de filas resultantes de
ambas consultas es nueve, el operador UNION retorna sólo valores únicos. Aparecen dos empleados
cuyo apellido es King en el resultado, pero las fechas de contratación son diferentes. La diferenciación de
elementos en el conjunto resultado se establece a nivel de fila .

UNION ALL

El operador UNION ALL no ordena ni filtra el conjunto resultado; el mismo retorna todas las filas de la
primer consulta más todas las filas de la segunda, sin eliminar duplicados .

INTERSECT

El operador INTERSECT es utilizado para recuperar las filas retornadas por ambas consultas, esto es, las
filas en común entre ambas consultas .

MINUS

El operador MINUS es utilizado para recuperar las filas retornadas por la primer consulta, que no son
retornadas por la segunda consulta .
6.1 Uso de operadores SET
6.1.4 ORDER BY en consultas compuestas

Puede existir únicamente una cláusula ORDER BY en la consulta; no es posible especificar una cláusula
ORDER BY en cada consulta que forma parte de la consulta compuesta al utilizar operadores SET .

Al escribir la cláusula ORDER BY, es posible utilizar :


• Los nombres de columnas empleados en la primer consulta,
• Los nombres de alias empleados en la primer consulta
• Notación posicional

• Combinación de las anteriores


6.1 Uso de operadores SET
6.1.5 AP: Manejo de operadores SET

Laboratorio 6.1.5

Manejo de operadores SET

Comprender la estructura de
consultas compuestas (consultas
que utilizan operadores SET).
Utilizar operadores SET para
resolver diferentes requerimientos
que requieran la manipulación de
conjuntos de filas. Ordenar
resultados en consultas con
operadores SET.

Duración Estimada: 40 min.

6.1 Uso de operadores SET


6.1.6 AI: Uso de operadores SET

Los círculos representan conjuntos de resultados arrojados por las consultas denominadas A, B y C. Al
combinar las consultas A, B y C a través de operadores SET, la región sombreada representa el
resultado obtenido y la región sin sombrear representa las filas excluidas del resultado. Teniendo en
cuenta la combinación de conjuntos, complete la expresión de consulta compuesta utilizando operadores
SET (UNION, UNION ALL, INTERSECT, y MINUS).
6.1 Uso de operadores SET
6.1.7 Síntesis
Operadores SET combinan los resultados de dos consultas compuestas en un único resultado. Consultas
que contienen operadores SET son denominadas consultas compuestas. Los operadores SET SQL
soportados por Oracle 10g Server son: UNION, UNION ALL, INTERSECT y MINUS.

Utilizando operadores SET, es posible combinar múltiples consultas. Todos los operadores SET poseen
igual precedencia. Si una sentencia SQL posee múltiples operadores SET, Oracle 10g Server evalúa de
izquierda a derecha excepto que los paréntesis especifiquen explícitamente un orden diferente.

Las expresiones correspondientes en las listas de selección de las consultas componentes en una
consulta compuesta deben coincidir en número y tipos de dato, considerando que, según el caso, puede
existir una conversión de tipos de dato implícita.

Este tema abordó operadores SET, su precedencia y utilización en la operación de conjuntos de filas.
6.2 Funciones datetime de Oracle 10g

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al


Material del Estudiante (Kit).
6.2 Funciones datetime de Oracle 10g
6.2.1 Objetivos
Una subconsulta es una consulta dentro de una consulta. En una consulta que posea múltiples partes,
una subconsulta responde parte de la consulta general, y la consulta padre responde el resto de la
consulta. Cuando se anidan subconsultas, la subconsulta que se encuentra en el nivel más anidado es
evaluada primero.

El mecanismo de separar una consulta general en partes menores es una práctica común y potente en la
manipulación de datos. Este tema abarca los diferentes tipos de subconsultas y su utilización en
consultas de nivel superior.

6.2 Funciones datetime de Oracle 10g


6.2.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
6.2 Funciones datetime de Oracle 10g
6.2.3 Descripción de las zonas horarias

Oracle 10g Sever introduce muchas características para la funcionalidad de la fecha, soportando las
zonas horarias para lo cual adiciona nuevos tipos de datos fecha/hora, como participante de la
comisión elaboradora de las especificaciones del ANSI SQL.
La zona horaria por defecto de la base de datos es la misma que la del sistema operativo. La zona
horaria por defecto de la base de datos se define especificando la cláusula SET TIME_ZONE de la
sentencia CREATE DATABASE. Si se omite, la zona horaria por defecto de la base de datos es la zona
horaria del sistema operativo. La zona horaria de la base de datos se puede cambiar para una sesión con
una sentencia ALTER SESSION.

Oracle 10g Server introduce los siguientes tipos de datos fecha/hora:

TIMESTAMP (TS) : permite almacenar el año, mes, día, hora, minuto, segundo y además es posible el
fraccionamiento de segundos con una precisión de hasta nueve dígitos.

TIMESTAMP WITH TIME ZONE (TSTZ) : este tipo de dato es similar a TIMESTAMP, pero también
almacena información sobre la zona horaria.

TIMESTAMP WITH LOCAL TIME ZONE (TSLTZ) : este tipo de dato también es similar a TIMESTAMP, y
como TIMESTAMP WITH TIME ZONE incluye información sobre la zona horaria. A diferencia de
TIMESTAMP WITH TIME ZONE, este tipo de dato no almacena la zona horaria junto con la fecha y hora,
sino que almacena la hora en una forma normalizada a la zona horaria de la base de datos. Los datos se
normalizan a la zona horaria de la base de datos cuando están almacenados y son ajustados a la zona
horaria de la sesión cuando son seleccionados por los usuarios.

INTERVAL YEAR TO MONTH : este tipo de dato permite representar un período de tiempo en años y
meses. Puede ser utilizado para almacenar la diferencia entre dos valores de fecha.

INTERVAL DAY TO SECOND : este tipo de dato permite representar un período de tiempo en días,
horas, minutos y segundos. Puede ser utilizado para almacenar la diferencia entre dos valores de fecha,
incluyendo los segundos.
6.2 Funciones datetime de Oracle 10g
6.2.4 Detalle de las funciones disponibles

Oracle 10g Server provee una gran cantidad de funciones relacionadas con los cálculos que involucra el
manejo de zona horaria. Algunas de estas funciones se muestran en la figura .
6.2 Funciones datetime de Oracle 10g
6.2.5 AP: Modificar el formato de fecha de la sesión

Laboratorio 6.2.5

Modificar el formato de fecha


de la sesión

Utilizar las nuevas funcionalidades


de los tipos de datos de
fecha/hora de Oracle10g.

Duración Estimada: 20 min.

6.2 Funciones datetime de Oracle 10g


6.2.6 AI: Detalle de las zonas horarias

¿Cuál de los siguientes tipos de datos almacena información sobre la zona horaria junto a la fecha?

6.2 Funciones datetime de Oracle 10g


6.2.7 Síntesis
DATE es el tipo de dato generalmente utilizado para el almacenamiento y la manipulación de datos
fecha / hora. Oracle 10g soporta nuevos tipos de dato, como TIMESTAMP e INTERVAL, para manipular
datos fecha / hora. Los tipos de dato TIMESTAMP son: TIMESTAMP, TIMESTAMP WITH TIME ZONE,
TIMESTAMP WITH LOCAL TIME ZONE. Los tipos de dato INTERVAL en Oracle 10g son: INTERVAL
YEAR TO MONTH, e INTERVAL DAY TO SECOND.

Este tema abordó los nuevos tipos de dato fecha / hora introducidos por Oracle 10g, formas de configurar
una sesión para visualizar diferentes formatos de fecha, el almacenamiento y la manipulación de usos
horarios, y cómo utilizar funciones de manipulación de tipos de dato fecha / hora.
6.3 Mejoras de la cláusula GROUP

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al


Material del Estudiante (Kit).
6.3 Mejoras de la cláusula GROUP
6.3.1 Objetivos
La agregación de datos es una parte fundamental en el análisis de datos en data warehousing
(almacenes de datos). Para mejorar el rendimiento en agregaciones de datos, Oracle 10g Server provee
extensiones a la cláusula GROUP BY. A través de tales extensiones, es posible escribir una sentencia
SELECT simple que incluya filas de subtotales por cada nivel de grupo y un total general. También se
puede calcular de manera sencilla subtotales para las diferentes combinaciones posibles de
agrupamientos derivadas de la expresión GROUP BY.

Al incluir filas de subtotales en el resultado de una consulta SQL, dicho resultado queda conformado por
filas a diferentes niveles de agrupamiento. Algunas de estas filas corresponden al nivel de grupo regular
expresado en la cláusula GROUP BY, y otras corresponden a niveles de grupo agregados (filas
superagregadas). Oracle 10g Server provee funciones especiales para identificar programáticamente el
nivel de agrupamiento al que pertenece una fila determinada.

Este tema aborda las extensiones a la cláusula GROUP BY soportados por Oracle 10g, y su
funcionalidad para calcular reportes de tabulación cruzada y reportes incluyendo subtotales.

6.3 Mejoras de la cláusula GROUP


6.3.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
6.3 Mejoras de la cláusula GROUP
6.3.3 Escenario de agregación
Para ilustrar el uso de una extensión GROUP BY, suponga una compañía hipotética que posee ventas a
lo largo de todo el mundo, el seguimiento de las ventas se realiza en dólares y por canal de ventas. La
figura presenta un reporte de tabulación cruzada simple (también se denomina de referencias
cruzadas o de doble entrada) que muestra el total de ventas, correspondientes a septiembre de 2000, por
país y por canal de ventas. Los países incluidos en el reporte son UK y US, y los canales de ventas
considerados son Ventas directas e Internet.

Tener en cuenta que aún un reporte simple como este, consistiendo de sólo nueve valores en su grilla de
datos, contiene cuatro subtotales y un total general. Los subtotales son por canal de ventas o por país.
Los diferentes niveles de agregación (o niveles de agrupamiento de datos) clasifican los valores
pertenecientes a la tabla en filas regulares y filas superagregadas .

Cabe resaltar que la mitad de los valores computados no pueden ser calculados con una cláusula
GROUP BY simple agrupando por canal y país. Para calcular los valores agregados de alto nivel se
necesitan consultas adicionales .

Oracle 10g Server posee comandos de base de datos que ofrecen mejoras en los cálculos de subtotales,
lo que brinda ventajas funcionales al llevar a cabo operaciones de análisis, consulta y reporte de datos.
Los principales beneficios obtenidos al utilizar estas extensiones provistas por Oracle 10g Server son:
• Programación simplificada, requiere menos código SQL
• Procesamiento de consultas más rápido y eficiente
• Reducción en la carga de procesamiento del cliente y en el tráfico de red, ya que el trabajo de
agregación es realizado por el servidor de base de datos

• Oportunidad de almacenar agregaciones en cache


6.3 Mejoras de la cláusula GROUP
6.3.4 Superagregados

Los modificadores a la cláusula GROUP BY, CUBE y ROLLUP, permiten crear agregaciones de
agregados, o superagregados. Estos superagregados o filas de sumarización son incluidos en el conjunto
resultado de manera similar a utilizar la sentencia COMPUTE en cortes de control en SQLPLus; esto es,
los mismos son incluidos en los datos y contienen valores nulos en las columnas agregadas. ROLLUP
crea agregaciones jerárquicas. CUBE crea agregaciones para todas las combinaciones de columnas
especificadas. Las principales ventajas de CUBE y ROLLUP es que las mismas permiten agregaciones
más robustas que COMPUTE y además funcionan con cualquier herramienta SQL.

Debido a que todo resultado de una consulta SQL posee el formato de una tabla plana con filas y
columnas, el resultado arrojado por una consulta que utilice una extensión Oracle 10g a la cláusula
GROUP BY estará compuesto de filas a diferentes niveles de agregación .
6.3 Mejoras de la cláusula GROUP
6.3.5 Revisión cláusula GROUP BY

La cláusula GROUP BY produce un grupo de filas único para cada combinación de valores de las columnas
que aparecen en la expresión de agrupamiento. Considerando los datos de ejemplo mostrados en la figura
, un agrupamiento por género y por estado civil produce el resultado mostrado en la figura . Notar que
la columna resultante denominada CREDIT es un cálculo que contiene la suma de los límites crediticios para
cada combinación única de valores de género y estado civil.
6.3 Mejoras de la cláusula GROUP
6.3.6 Descripción de Rollup

ROLLUP permite calcular en una sentencia SELECT múltiples niveles de subtotales y, además, también
calcula un total general. ROLLUP es una extensión simple de la cláusula GROUP BY y es altamente
eficiente. Dicho operador crea subtotales jerárquicamente que se despliegan desde el nivel más detallado
hacia el total general, siguiendo una lista de agrupamientos especificados en la cláusula GROUP BY.

ROLLUP toma como argumento una lista ordenada de columnas de agrupamiento. Primero calcula los
valores agregados estándares (o regulares) especificados en la cláusula GROUP BY. Luego, calcula
subtotales de nivel superior en forma progresiva, moviéndose de derecha a izquierda a través de las
columnas de agrupamiento. Finalmente, calcula el total general. ROLLUP crea subtotales a “n+1” niveles,
donde “n” es el número de columnas de agrupamiento especificadas .

El orden de las columnas en el modificador ROLLUP es significante, ya que dicho orden determina
dónde Oracle 10g Server produce subtotales. ROLLUP crea agregaciones jerárquicas, de manera que el
orden de las expresiones en la cláusula ROLLUP es significante. El ordenamiento sigue las mismas
convenciones utilizadas en la cláusula GROUP BY; de lo más general a lo más específico. Al invertirse el
orden se obtienen subtotales diferentes.

Interpretando nulos en el resultado

Valores nulos retornados por las extensiones GROUP BY no siempre corresponden a valores nulos
tradicionales. Por el contrario, un nulo puede indicar que la fila resultante correspondiente es un subtotal o
fila superagregada - .
6.3 Mejoras de la cláusula GROUP
6.3.7 Descripción de Cube

El operador CUBE produce subtotales para todas las posibles agregaciones, no sólo para aquellas en la
jerarquía de columnas especificadas. El número de agregaciones creadas por el modificador CUBE está
dado por el número de combinaciones distintas de valores de datos en todas las columnas que aparecen
en la cláusula CUBE. Esto es, CUBE calcula valores para todas las combinaciones consideradas por el
operador ROLLUP y agrega combinaciones adicionales.
CUBE crea agregaciones para todas las combinaciones de columnas, de manera que, diferenciándose de
ROLLUP, el orden de expresiones no es significante.

En términos de análisis multidimensional, CUBE genera todos los subtotales que pueden ser calculados
para un cubo de datos con las dimensiones especificadas, donde cada dimensión corresponde a una
columna especificada en la expresión de agrupamiento .
6.3 Mejoras de la cláusula GROUP
6.3.8 Funciones Grouping

Al utilizar ROLLUP y CUBE se crean filas superagregadas en el resultado. La función GROUPING sirve
para distinguir cuáles filas en el conjunto resultado corresponden a sobtotales o filas superagregadas, y
determinar cuál es el nivel de agrupamiento de la fila.

GROUPING recibe como argumento un nombre de columna, y retorna el valor 1 cuando encuentra un
valor nulo creado por la operación de CUBE o ROLLUP. Esto es, si el nulo indica que la fila es un subtotal
o fila superagregada, GROUPING retorna 1. Para cualquier otro valor, incluyendo nulos almacenados,
GROUPING retorna 0 .

Función GROUPING_ID

Para conocer el nivel de agrupamiento de una fila determinada es posible utilizar la función
GROUPING_ID. Dicha función retorna un número que permite determinar el nivel de agrupamiento
exacto. Para cada fila, la función GROUPING_ID toma el conjunto de ceros y unos, que serían generados
si se utilizara la función GROUPING correspondiente, y los concatena formando un vector de bits. El
vector de bits es tratado como un número binario, y el valor en notación decimal correspondiente es
retornado por la función GROUPING_ID .

Función GROUP_ID

Las extensiones a la cláusula GROUP BY permiten obtener resultados incluyendo niveles de


agrupamiento duplicados. La función GROUP_ID permite distinguir agrupamientos duplicados. Si existen
múltiples conjuntos de filas calculados para un nivel de agrupamiento determinado, GROUP_ID asigna el
valor cero a todas las filas en el primer conjunto. Valores consecutivos, comenzando en uno, son
asignados a cada conjunto de filas duplicadas correspondientes al agrupamiento en cuestión .
6.3 Mejoras de la cláusula GROUP
6.3.9 AP: Uso de extensiones en la cláusula GROUP BY

Laboratorio 6.3.9

Uso de extensiones en la
cláusula GROUP BY.

Entender los niveles de


agrupamiento formados por CUBE
y ROLLUP. Diferenciar
programáticamente filas regulares
y filas superagregadas.
Comprender la sintaxis de
extensiones a la cláusula GROUP
BY.

Duración Estimada: 45 min.

6.3 Mejoras de la cláusula GROUP


6.3.10 AI: Rollup, Cube y Grouping Sets

En base al enunciado, conteste verdadero “V” o falso “F”.


6.3 Mejoras de la cláusula GROUP
6.3.11 Síntesis
Oracle 10g Server provee extensiones a la cláusula GROUP BY. CUBE, ROLLUP y GROUPING SETS
facilitan la realización de reportes de tabulación cruzada y la inclusión de filas de subtotales en el
resultado de una consulta. ROLLUP calcula agregaciones a diferentes niveles de agregación, desde lo
más detallado hasta el total general. CUBE calcula todas las combinaciones posibles de agregaciones.
GROUPING SETS permite especificar de forma precisa los juegos de grupo que se desea calcular en una
sentencia SELECT. Utilizando las distintas extensiones a la cláusula GROUP BY, es posible escribir
expresiones de agrupamiento combinadas o compuestas.

ROLLUP es útil en la inclusión de filas de subtotales, CUBE es útil para el cómputo de reportes de
tabulación cruzada.

La función GROUPING permite identificar a qué nivel de agrupamiento pertenece la fila en cuestión,
posibilitando el ordenamiento, filtrado y la personalización de filas subtotales en el resultado.

Este tema abordó las extensiones provistas por Oracle 10g Server a la cláusula GROUP BY, cómo incluir
filas subtotales en el resultado de una consulta SQL, y cómo computar el cubo de combinaciones de
agrupamientos posibles. Además, dicho tema profundizó en cómo diferenciar, en el resultado de una
consulta, filas agregadas regulares y filas superagregadas.

6.4 Subconsultas avanzadas

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al


Material del Estudiante (Kit).
6.4 Subconsultas avanzadas
6.4.1 Objetivos
Una subconsulta es una consulta dentro de una consulta. En una consulta que posea múltiples partes,
una subconsulta responde parte de la consulta general, y la consulta padre responde el resto de la
consulta. Cuando se anidan subconsultas, la subconsulta que se encuentra en el nivel más anidado es
evaluada primero.

El mecanismo de separar una consulta general en partes menores es una práctica común y potente en la
manipulación de datos. Este tema abarca los diferentes tipos de subconsultas y su utilización en
consultas de nivel superior.

6.4 Subconsultas avanzadas


6.4.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
6.4 Subconsultas avanzadas
6.4.3 Subconsultas de varias Columnas

Una subconsulta es de columna múltiple cuando tiene más de una columna en la cláusula SELECT de la
misma. Son generalmente usadas para comparar condiciones de columna o en sentencias UPDATE.
Cuando dos o más columnas serán comprobadas al mismo tiempo, deben encerrarse entre paréntesis.
-
6.4 Subconsultas avanzadas
6.4.4 Subconsultas en la cláusula FROM

Una subconsulta puede aparecer en la cláusula FROM de la sentencia SELECT. Esto es similar a definir
y usar una vista, esto también se conoce como vistas en línea.

La subconsulta en la cláusula FROM debe estar encerrada entre paréntesis y además es posible
asignarle un alias. Las columnas seleccionadas en la subconsulta pueden ser referenciadas en la
consulta principal, tal como se referencian las de una tabla o vista normal.
6.4 Subconsultas avanzadas
6.4.5 Subconsultas Correlacionadas

Una subconsulta correlacionada es cuando la subconsulta hace referencia a una columna de una tabla
referenciada en la sentencia principal. Una subconsulta correlacionada es evaluada por cada fila
procesada en la sentencia principal, por lo tanto la misma se ejecuta una vez por cada fila retornada por
la consulta padre. La sentencia padre puede ser un SELECT , UPDATE o DELETE .

Permite responder a cuestiones cuya respuesta depende del valor en cada fila de la consulta principal.
Por ejemplo, ¿qué empleados ganan más que el salario medio de su departamento?, donde para cada
registro padre se calcula el salario medio de su departamento . Este tipo de consultas también se
utilizan cuando se desea actualizar o borrar filas de una tabla basadas en filas de otra tabla.
6.4 Subconsultas avanzadas
6.4.6 Subconsultas Escalares

Una subconsulta escalar retorna exactamente el valor de columna de una fila. Pueden ser utilizadas en la
mayoría de los lugares donde se usa un nombre de columna o una expresión, tales como dentro de las
funciones de una sola fila como un argumento de entrada, en la cláusula VALUE de la sentencia INSERT,
en un ORDER BY, en el WHERE y en un SELECT .

Las subconsultas escalares también se pueden utilizar en expresiones CASE o DECODE y no pueden
ser usadas en las cláusulas GROUP BY, HAVING, START WHITH y CONNECT BY entre otras.
6.4 Subconsultas avanzadas
6.4.7 Descripción del operador Exists - Sintaxis

La cláusula EXISTS (o NOT EXISTS) comprueba si una subconsulta devuelve algún valor (EXISTS) o no
devuelve ninguno (NOT EXISTS).

Por lo general se usan junto con una consulta anidada correlacionada.

En la figura , la consulta de primer nivel busca en la tabla de departamentos los nombres y, para cada
fila, comprueba —mediante la subconsulta— que para ese número de departamento no existan
empleados que hayan sido contratados el 3 de diciembre de 1990.

En general, EXISTS(Q) devuelve VERDADERO si hay por lo menos un registro en el resultado de la


consulta Q y devuelve FALSO en caso contrario. Por otro lado, NOT EXISTS(Q) devuelve VERDADERO
si no hay registros en el resultado de la consulta Q y devuelve FALSO en caso contrario.
6.4 Subconsultas avanzadas
6.4.8 AP: Prácticas con Exists

Laboratorio 6.4.8

Utilización de la operador
EXISTS

Comprender la utilización del


operador EXISTS verificando la
existencia de un valor
determinado sobre un conjunto
resultado.

Duración Estimada: 40 min.

6.4 Subconsultas avanzadas


6.4.9 AP: Actualizaciones correlacionadas

Laboratorio 6.4.9

Actualizaciones
Correlacionadas

Ejercitar el uso de las sentencias


UPDATE y DELETE con
subconsultas correlacionadas.

Duración Estimada: 40 min.


6.4 Subconsultas avanzadas
6.4.10 AI: Consultas correlacionadas

Indique cuál de las siguientes sentencias es una subconsulta correlacionada.

6.4 Subconsultas avanzadas


6.4.11 Síntesis
Una subconsulta es una consulta dentro de una consulta. La escritura de subconsultas es un mecanismo
potente de manipular datos. Subconsultas que retornan varias columnas son denominadas subconsultas
de múltiples columnas, y las mismas sirven para comparar múltiples valores (o filas de valores).

Subconsultas utilizadas en la cláusula FROM de una consulta de nivel superior son denominadas vistas
en línea. Cuando una columna de la tabla utilizada en la consulta padre es referenciada en la
subconsulta, dicha subconsulta se denomina subconsulta correlacionada.

Una subconsulta escalar retorna una única fila conformada por un único valor de columna.
Subconsultas escalares pueden ser utilizadas en la mayoría de los lugares donde puede aparecer una
expresión.

IN y EXISTS son los operadores más comúnmente utilizados con subconsultas. Subconsultas pueden
aparecer en la cláusula WHERE o en la cláusula FROM. Además, subconsultas pueden ser utilizadas en
lugar de nombres de tablas en sentencias DELETE, INSERT y UPDATE.

Este tema abarcó la funcionalidad de los diferentes tipos de subconsultas, y su utilización en la


separación de consultas generales en partes.
6.5 Recuperación Jerárquica

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al


Material del Estudiante (Kit).
6.5 Recuperación Jerárquica
6.5.1 Objetivos
Cuando una tabla contiene datos relacionados jerárquicamente, es posible seleccionar filas en un orden
jerárquico. Oracle 10g Server incluye cláusulas especiales para escribir una consulta jerárquica. El
resultado en este tipo de consulta, en general, es un conjunto de filas relacionadas representando una
estructura de árbol invertido, comenzando desde la raíz y descendiendo por las ramas hasta las hojas.
Una estructura de árbol puede ser recorrida desde abajo hacia arriba (bottom-up) o desde arriba hacia
abajo (top-down).

Utilizando ordenamiento común de filas en una consulta jerárquica puede destruir la estructura de árbol
representada en el resultado. Oracle 10g Server posee una cláusula especial de ordenamiento para
ordenar filas hermanas (hijas del mismo padre).

Este tema aborda consultas jerárquicas, filas padre / hijas, expresiones padre / hijos, y ordenamiento de
filas respetando los niveles en una estructura de árbol.
6.5 Recuperación Jerárquica
6.5.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
6.5 Recuperación Jerárquica
6.5.3 Estructura de árbol

Una tabla plana en una base de datos relacional puede contener una relación consigo misma o
autorelación. La tabla EMPLOYEES posee una relación de este tipo, en la cual la columna MANAGER_ID
referencia a un empleado por su EMPLOYEE_ID. Dicho de otra manera, los valores que toma la columna
MANAGER_ID corresponden a un EMPLOYEE_ID determinado. Esta relación jerárquica que existe entre
las filas de una misma tabla puede visualizarse en la forma de árbol .
6.5 Recuperación Jerárquica
6.5.4 Consultas Jerárquicas

Oracle soporta cláusulas especiales, que pueden ser utilizadas en una sentencia SELECT, para
recuperar y recorrer estructuras de árbol. Una consulta SQL que contenga las cláusulas START WITH y
CONNECT BY se denomina consulta jerárquica. Si una tabla contiene datos jerárquicos, es posible
seleccionar filas en un orden jerárquico utilizando una consulta jerárquica.

• START WITH especifica la/s fila/s raíz de la jerarquía


• CONNECT BY especifica la relación entre filas padres y filas hijas en la jerarquía.

En una consulta jerárquica, la condición seguida a CONNECT BY debe ser cualificada con el operador
PRIOR para hacer referencia a la fila padre. Esto es:

… PRIOR expression = expression


o
… expression = PRIOR expression

Si la condición es compuesta, el operador PRIOR puede ser utilizado sólo en una condición. Por ejemplo:

CONNECT BY last_name != ’King’ AND PRIOR employee_id = manager_id

PRIOR es un operador unario y posee la misma precedencia que los operadores aritméticos “+” y “-“. El
mismo evalúa la expresión inmediata siguiente para la fila padre de la fila corriente en una consulta
jerárquica.

PRIOR es comúnmente utilizado al comparar valores de columnas con el operador de igualdad.


Teóricamente, es posible utilizar otros operadores, que no sea el de igualdad, en la cláusula CONNECT BY.
No obstante, las condiciones creadas con estos otros operadores pueden causar bucles infinitos a través de las
combinaciones posibles. En estos casos, Oracle Server detecta el bucle en tiempo de ejecución y retorna un error.

La forma en que Oracle Server procesa una cláusula WHERE, si existe, en una consulta jerárquica
depende de:

• Si la cláusula WHERE no contiene una unión, Oracle Server aplica todos los predicados que no
correspondan al CONNECT BY después de realizar el procesamiento CONNECT BY sin afectar a
las filas restantes de la jerarquía.
• Si la cláusula WHERE contiene una unión, Oracle Server aplica los predicados de unión antes de
realizar el procesamiento CONNECT BY.

Oracle Server utiliza la información de las cláusulas de una consulta jerárquica para formar la jerarquía
resultante realizando una serie de pasos y retorna el resultado en orden: raíz – izquierda – derecha - .

En una consulta jerárquica, no debe utilizarse las cláusulas ORDER BY o GROUP BY, ya que las mismas
destruyen el orden de la jerarquía establecido por CONNECT BY. Si se desea ordenar las filas a nivel de
hermanos (hijos del mismo padre), utilice la cláusula ORDER SIBLINGS BY .

SYS_CONNECT_BY_PATH

La función SYS_CONNECT_BY_PATH(x, c), disponible a partir de Oracle, toma dos argumentos, “x” es
una columna y “c” es un caracter simple. Dicha función es válida únicamente con consultas jerárquicas, y
la misma retorna el camino (o path) de la columna “x”, delimitado por el caracter “c”, desde la raíz hacia el
nodo para cada fila retornada por la condición de CONNECT BY .

A los nodos de un árbol se les asignan números de niveles desde la raíz. Utilice la función LPAD en conjunción
con la pseudocolumna LEVEL para mostrar un informe jerárquico como árbol con sangrado.

Eliminación de Ramas

Puede utilizar las cláusulas WHERE y CONNECT BY para eliminar el árbol; es decir, para controlar qué
nodos o qué filas se muestran. El predicado que utilice funciona como condición booleana.
6.5 Recuperación Jerárquica
6.5.5 AP: Informes de estructuras jerárquicas

Laboratorio 6.5.5

Informes de estructuras
jerárquicas

Comprender el almacenamiento
plano de estructuras jerárquicas a
través de autorelaciones. Escribir
expresiones CONNECT BY.
Recorrer estructuras jerárquicas.
Entender el uso de LEVEL para
identificar el nivel de la jerarquía y
dar formato a un resultado
jerárquico.

Duración Estimada: 45 min.

6.5 Recuperación Jerárquica


6.5.6 AI: Estructuras Jerárquicas

En base al enunciado, conteste verdadero “V” o falso “F”.


6.5 Recuperación Jerárquica
6.5.7 Síntesis
Una relación jerárquica entre filas de una tabla puede ser recuperada a través de consultas jerárquicas.
Se denomina consulta jerárquica a toda sentencia SELECT que incluya las cláusulas CONNECT BY y
START WITH.

START WITH especifica la/s fila/s raíz o puntos de comienzo a partir de los cuales se construye la
jerarquía de filas resultantes. CONNECT BY especifica la relación entre filas padre y filas hijas en la
jerarquía. El operador PRIOR en la cláusula CONNECT BY hace referencia a la fila padre. A través de la
expresión en la cláusula CONNECT BY es posible especificar el orden de recorrido del árbol para
construir el resultado.

Por cada fila retornada en una consulta jerárquica, la pseudocolumna LEVEL retorna el valor 1 para una
fila raíz, el valor 2 para una fila hija de esa raíz, y así sucesivamente. Una fila raíz es la fila ubicada al
tope en el árbol invertido. Una fila hija es cualquier otra fila no raíz. Una fila padre es cualquier fila que
posee filas hijas. Una fila hoja es cualquier fila sin filas hijas.

Para ordenar el resultado retornado por una consulta jerárquica es posible utilizar la cláusula ORDER
SIBLINGS BY. La palabra reservada SIBLINGS sólo es válida en consultas que posean la cláusula
CONNECT BY. ORDER SIBLINGS BY preserva el orden especificado en la consulta jerárquica y luego
aplica la cláusula de ordenamiento a los hermanos en la jerarquía.

Este tema abordó consultas jerárquicas, las palabras clave y funciones Oracle para recorrer y construir
estructuras de árbol, y el ordenamiento de filas respetando los niveles existentes en la jerarquía de filas.
6.6 Extensiones de Oracle 10g para sentencias DML y DDL

En la figura se presenta una clasificación de los contenidos tratados en esta subunidad teniendo en
cuenta la relación de los mismos con el Material del Estudiante (kit).

Esta clasificación sugiere diferentes momentos de lectura, estudio y revisión entre los contenidos de este
currículo y el Material del Estudiante (Kit). Según esta clasificación los contenidos pueden ser de:

• Lectura Previa: Se sugiere la lectura de estos contenidos antes de abordar los subtemas, temas
o unidad asociados al Material del Estudiante (Kit).
• Lectura Complementaria: Se sugiere la lectura de estos contenidos como complemento a los
subtemas, temas o unidad asociados al Material del Estudiante (Kit).
• Lectura Adicional: Se sugiere la lectura posterior de estos contenidos como material adicional a
los tratados en el Material del Estudiante (Kit).

• Prácticas : Actividades de laboratorios e interactivas incluidas como práctica adicional al


Material del Estudiante (Kit).
6.6 Extensiones de Oracle 10g para sentencias DML y DDL
6.6.1 Objetivos
Oracle 10g Server incluye extensiones útiles para la manipulación y definición de datos.

A partir de Oracle 10g, la sentencia INSERT puede ser utilizada para adicionar filas a más de una tabla a
la vez, esto es, una única sentencia DML inserta en más de una tabla basada en alguna condición. Esta
inserción en múltiples tablas es muy útil para la carga eficiente de datos, ya que es posible adicionar
datos a múltiples tablas destino realizando una única pasada por la tabla fuente, lo que implica un número
ínfimo de invocaciones a la base de datos.

Por otro lado, utilizando DLL es posible crear metadatos para una tabla almacenada fuera de la base de
datos. Una tabla que no es almacenada en la base de datos es denominada tabla externa. Una vez
creados los metadatos correspondientes es posible acceder a fuentes externas en forma transparente,
como si permanecieran en tablas de la base de datos local.

Este tema aborda extensiones Oracle 10g a sentencias DML y DDL, sus ventajas y restricciones.

6.6 Extensiones de Oracle 10g para sentencias DML y DDL


6.6.2 Cuestionario de Iniciación

Coloque el cursor sobre los botones numerados que aparecen a la izquierda para visualizar las
preguntas de iniciación. Si desea, puede desplegar su respuesta.
6.6 Extensiones de Oracle 10g para sentencias DML y DDL
6.6.3 Inserciones Múltiples

En Oracle 10g, la sentencia INSERT puede ser utilizada para agregar filas a más de una tabla al mismo
tiempo. En versiones anteriores, esta funcionalidad requiere varias sentencias INSERT INTO o con
condiciones lógicas IF-THEN-ELSE.

Esta sentencia es muy útil para carga de datos en forma eficiente, puesto que los datos a agregar solo se
buscan una sola vez, minimizando la cantidad de llamadas a la base de datos.

Los cuatro tipos de sentencias INSERT para inserciones en varias tablas son:

INSERT incondicional: agrega las filas en todas las tablas sin ninguna condición. Todas las sentencias
INSERT se ejecutarán simultáneamente.

INSERT de rotación: inserta filas en tablas normalizadas de la base de datos con datos provenientes de
una fuente no normalizada, transformando cada registro de la tabla origen en N registros de la/s tabla/s
destino, siendo N igual al número de cláusulas INTO que se especifiquen en la sentencia.

INSERT ALL condicional: evalúa cada uno de las cláusulas WHEN para determinar si la fila se inserta
en cada tabla especificada en cada cláusula INTO. Todas las cláusulas WHEN son evaluadas y solo en
las que la condición es verdadera se ejecutan las cláusulas INTO correspondiente. Una cláusula ELSE
opcional puede también ser utilizada.

INSERT FRIST condicional: evalúa cada una de las cláusulas WHEN en orden en el cual aparecen en la
declaración y ejecuta solamente la cláusula INTO que pertenezca a la primer cláusula WHEN que se
evalúe como verdadero. Una cláusula ELSE opcional puede también ser utilizada.
6.6 Extensiones de Oracle 10g para sentencias DML y DDL
6.6.4 Descripción de Tablas Externas

Oracle 10g Release 1 (9.0.1), proporciona una manera de tener acceso a datos en fuentes externas
como si estuvieran almacenados en una tabla de la base de datos. Usted puede conectarse a la base de
datos y crear los metadatos para la tabla externa, usando el comando DDL CREATE TABLE ...
ORGANIZATION EXTERNAL. Este comando está dividido en dos partes: una que describe los tipos de la
columna, y la otra (los parámetros de acceso) que describe el mapeo de los datos externos a las
columnas de datos Oracle 10g.

Una tabla externa no describe ningún dato almacenado en la base de datos ni cómo los datos se
almacenan en la fuente externa. En cambio, describe cómo el nivel de la tabla externa debe presentar los
datos al servidor. Es responsabilidad del controlador de acceso y del nivel de tabla externa es hacer las
transformaciones necesarias sobre los datos del archivo de datos de modo que coincida con la definición
de la tabla externa.
6.6 Extensiones de Oracle 10g para sentencias DML y DDL
6.6.5 Consultas de tablas externas

Las tablas externas son de solo lectura, por lo tanto, no se pueden realizar operaciones DML ni crear
índices sobre ellas.
Una tabla externa puede consultarse utilizando una sentencia SELECT de la misma forma en que se
consulta cualquier otra tabla local. Cuando se accede a una tabla externa a través de una sentencia SQL,
las columnas o campos de la tabla externa pueden ser utilizados de la misma forma en que se utilizan
columnas de tablas locales. También es posible utilizar campos de tablas externas como argumentos de
cualquier función predefinida SQL, función PL/SQL, o función Java .

Este mecanismo de consulta sobre tablas externas es útil en la etapa de carga y transformación de datos
en un almacén de datos.
6.6 Extensiones de Oracle 10g para sentencias DML y DDL
6.6.6 AP: Manipulación de datos externos

Laboratorio 6.6.6

Manipulación de datos externos

Comprender la utilización de
tablas externas e incorporar datos
externos a la base de datos.
Ejercitar la definición de tablas
externas como forma de
incorporar datos a la base de
datos.

Duración Estimada: 30 min.

6.6 Extensiones de Oracle 10g para sentencias DML y DDL


6.6.7 AI: Inserciones condicionales

Arrastre los componentes para armar la sentencia de inserción múltiple teniendo en cuenta el siguiente
caso:

Suponga que existe una compañía de venta de libros, videos y CDs de audio. Dicha compañía posee una
tabla SALES_DETAIL que contiene información acerca de todas las ventas. Como requerimiento del
sistema de ventas, es necesario cargar esta información en tres tablas focalizadas específicamente en las
tres categorías de productos: libros (B), audio (A), y videos (V). Estas tablas específicas a una categoría
son utilizadas por un sistema de análisis de ventas. La tabla SALES_DETAIL posee una columna
denominada PROD_CATEGORY.

En base a los valores que posee dicha columna debe decidirse en cuál de las anteriores tres tablas
realizar la inserción de datos. Si la categoría es ‘B’, realizar la inserción en la tabla BOOK_SALES. Si la
categoría es ‘A’, realizar la inserción en la tabla AUDIO_SALES. Si la categoría es ‘V’, realizar la inserción
en la tabla VIDEO_SALES.
6.6 Extensiones de Oracle 10g para sentencias DML y DDL
6.6.8 Síntesis
A partir de Oracle 10g, es posible realizar inserciones de múltiples tablas. A través de esta sentencia
INSERT se realiza la inserción de datos en más de una tabla a la vez. Una sentencia de inserción múltiple
incluye varias cláusulas WHEN condicionales, cada una especificando la inserción de datos en una tabla
destino a través de la cláusula INTO.

La palabra clave ALL especifica a Oracle 10g Server que evalúe cada una de las cláusulas WHEN,
independientemente que alguna de las mismas evalúe a verdadero o no. En contraposición, la palabra
clave FIRST especifica que debe detenerse la evaluación de cláusulas WHEN después de encontrar la
primer ocurrencia WHEN que evalúe a verdadero.

En Oracle 10g, es posible acceder a datos almacenados en fuentes externas como si los mismos
estuvieran en tablas de la base de datos. A través de sentencias de definición de datos es posible crear
metadatos que describen la fuente externa y permiten su acceso desde la base de datos. La definición de
una tabla externa consiste de dos partes: la descripción de los tipos de dato de columnas Oracle 10g, y
los parámetros de acceso que definen un mapeo desde datos externos hacia columnas de datos en la
base de datos.

La definición de una tabla externa define cómo un nivel de tabla externo presenta los datos al servidor de
base de datos. Todo mapeo necesario para cumplir dicho contrato es responsabilidad del driver que
manipula el acceso a los datos externos. Además, una tabla externa es de sólo lectura; esto es, no es
posible ejecutar operaciones DML y no es posible crear índices sobre tablas externas.

Este tema abordó algunas de las extensiones Oracle 10g a sentencias DML y DDL.
No pude copiar mas porque no tengo acceso a los otros modulos… valga el laburo que me tomo hacer ctrl. V
ctrl. C de los slides al Word… realmente me rompi el culo  saludos!!!