Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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:
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:
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.
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 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.
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:
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.
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.
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
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:
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.
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:
Laboratorio 1.1.15
1.1 Introducción
1.1.16 AP: Modelado Entidad –
Relación
Laboratorio 1.1.16
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.
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.
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.
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).
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 .
• 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
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 .
• 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.
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.
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.
Si una fila carece de un valor para una columna en particular, se dice que contiene un “null”.
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
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
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
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
Puede guardar comandos y sentencias desde el cuadro de texto en iSQL*Plus a un archivo de comandos de
texto del modo siguiente:
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
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. .
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.
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).
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.
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:
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. .
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.
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.
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
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.
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.
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.
Laboratorio 2.2.10
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
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
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).
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.
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:
• 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 .
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.
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 .
• 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.
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.
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.
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 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
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.
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 - .
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.
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
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).
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.
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
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
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. .
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
Laboratorio 2.4.16
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).
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.
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 .
• 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.
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.
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.
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.
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.
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
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:
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.
• Cláusula WHERE.
• Cláusula HAVING.
• Cláusula FROM de una sentencia SELECT o DELETE (este tema se desarrollará mas adelante).
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.
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.
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.
Además del operador IN, SQL ofrece los operadores que se detallan a continuación para escribir
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.
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.
Laboratorio 3.1.8
Laboratorio 3.1.9
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).
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.
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.
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.
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 UNDEFINE
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 .
Todas las variables de sistema toman valores por defecto cuando se inicia una sesión.
Laboratorio 3.2.7
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.
Laboratorio 3.2.8
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.
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.
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).
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.
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.
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.
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.
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.
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.
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:
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.
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
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.
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
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).
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
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.
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:
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.
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.
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.
Observaciones
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. -
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
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:
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.
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
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.
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).
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.
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 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.
Una restricción UNIQUE no es lo mismo que, o un sinónimo de, 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.
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:
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.
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.
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
Aseguramiento de la integridad de
los datos y cumplimiento de
especificaciones de negocio
mediante la aplicación de
diferentes tipos de restricciones.
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.
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.
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).
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).
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.
Si intento eliminar una fila de una vista con restricción de sólo lectura producirá un error.
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
Lea con atención las sintaxis de creación de vistas y considerando el conjunto los enunciados
presentados, una con flechas según corresponda.
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).
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.
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.
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 .
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.
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
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:
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.
Laboratorio 5.2.9
Manejo de Sinónimos
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.
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).
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.
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.
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.
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.
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.
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.
• 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.
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.
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.
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).
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
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.
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).
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.
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 .
Laboratorio 6.1.5
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.
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).
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.
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.
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
¿Cuál de los siguientes tipos de datos almacena información sobre la zona horaria junto a la fecha?
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).
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.
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
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.
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
Laboratorio 6.3.9
Uso de extensiones en la
cláusula GROUP BY.
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.
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).
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.
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).
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.
Laboratorio 6.4.8
Utilización de la operador
EXISTS
Laboratorio 6.4.9
Actualizaciones
Correlacionadas
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.
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).
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.
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:
Si la condición es compuesta, el operador PRIOR puede ser utilizado sólo en una condición. Por ejemplo:
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.
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.
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).
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.
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
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.
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!!!