131
UN Sistem NIVERSIDA mas AD REGION CLIE T NAL AUTÓ Autor DESA ENTE TUTOR NOMA DE r: Diego Sán ARRO E – SE R: Ing. Os LOS ANDE nchez OLLO ERVID scar Lleren ES “UNIAND O DOR na DES” MAN ORAC g UAL CLE 9i gina 1

Manual Oracle 9i

Embed Size (px)

Citation preview

Page 1: Manual Oracle 9i

UN

 

Sistem

NIVERSIDA

mas             

AD REGION

                      

CLIE

T

NAL AUTÓ

         Autor

DESA

ENTE

TUTOR

NOMA DE 

r: Diego Sán

ARRO

E – SE

R: Ing. Os

 LOS ANDE

nchez 

OLLO

ERVID

scar Lleren

ES “UNIAND

O

DOR

na

DES”   MANORAC

Pág

UAL CLE 9i 

gina 1 

Page 2: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 2 

INDICE

INTRODUCCION ORACLE

SISTEMA GESTOR DE BASE DE DATOS (SGBD) ORACLE

ADMINISTRADOR DE BASES DE DATOS (DBA)

ANALISIS INICIAL DE UN SGBD ORACLE

TELEPROCESO

SERVIDOR DE ARCHIVOS

CLIENTE-SERVIDOR

CARACTERISTICAS DEL MODELO CLIENTE/SERVIDOR

TIPOS DE CLIENTES

TIPOS DE SERVIDOR

INSTALACIÓN DE ORACLE 9I

CÓMO INSTALAR ORACLE CLIENT EN WINDOWS

(CLIENTE DE ORACLE)

CONEXIÓN NATIVE- CONEXIÓN OBDC

HERRAMIENTA SQL PLUS

ESTRUCTURA DEL LENGUAJE SQL

ARQUITECTURA ORACLE

CREAR UN TABLESPACE

ALTERAR UN TABLESPACE

BORRAR UN TABLESPACE

FICHEROS

Page 3: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 3 

INSTANCIAS

ESTRUCTURAS INTERNAS DE LA BD

TABLAS Y COLUMNAS

RESTRICCIONES DE TABLAS

USUARIOS

PROCEDIMIENTOS Y FUNCIONES

DISPARADORES, TRIGGERS

PRIVILEGIOS Y ROLES

SEGMENTOS, EXTENSIONES Y BLOQUES

FICHEROS DE LA BD

TIPOS DE SENTENCIAS

CREACIÓN TABLAS

TIPOS DE COLUMNAS

RESTRICCIONES

INSERCIÓN, ACTUALIZACIÓN Y BORRADO

BORRADO

SELECCIÓN

PRIVILEGIOS DEL SISTEMA

AUDITORÍA DE SEGURIDAD

PL/SQL

BLOQUE PL/SQL

TIPOS DE BLOQUES

FUNCIONES EN PL/SQL

TRIGGERS

EJECICIOS ORACLE 9i GENERAL

Page 4: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 4 

INTRODUCCION ORACLE

SISTEMA GESTOR DE BASE DE DATOS (SGBD) ORACLE

Está concebido con el fin de manejar grandes cantidades de información, además de

admitir conexiones concurrentes de multitud de usuarios (entornos multi-usuario) hacia

los mismos datos.

Oracle aporta un SGBD que estará ubicado en un hardware específico y bajo un sistema

operativo determinado.

La elección del entorno de trabajo (hardware, S.O. y tipología de la estructura

cliente/servidor) será una decisión que estará acorde con las necesidades del propio

sistema de información.

Las principales funcionalidades aportadas por todo el SGBD Oracle son:

• Soporte y tratamiento de una gran cantidad de datos (Gbytes).

• Soporte de una gran cantidad de usuarios accediendo concurrentemente a los

datos.

• Seguridad de acceso a los datos, restringiendo dicho acceso según las

necesidades de cada usuario.

• Integridad referencial en su estructura de base de datos.

• Conectividad entre las aplicaciones de los clientes en sus puestos de trabajo y el

servidor de datos Oracle (estructura cliente/servidor.

• Conectividad entre bases de datos remotas (estructura de bases de datos

distribuidas)

• Portabilidad.

• Compatibilidad.

ADMINISTRADOR DE BASES DE DATOS (DBA):

Es el responsable para el buen funcionamiento de toda una estructura de datos y todo su

entorno de trabajo.

Esta persona deberá tener un alto conocimiento de todo el sistema que envuelve al

SGBD.

Page 5: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 5 

Sobre este recae una alta responsabilidad, debido a las graves repercusiones que puede

traer una mala gestión de la información.

Las funciones que se le asignan a un DBA Oracle son las siguientes:

• Instalación y actualización del software del SGBD.

• Analizar e instalar en la base de datos las aplicaciones con las que van a

interactuar los usuarios. Esto, básicamente lleva consigo:

__ Asignación de espacios (tablespaces) en la base de datos y ubicación de los mismos

en los discos de la máquina.

__ Creación de todos los objetos (tablas, índices, vistas, etc.) requeridos por cualquiera

de las aplicaciones, así como su dimensionamiento dentro de la base de datos.

__ Actualización de los parámetros del sistema para el correcto funcionamiento de las

aplicaciones.

Creación de los usuarios y asignación de privilegios, con el fin de controlar la seguridad

de acceso de estos a la información de la base de datos.

Controlar y monitorizar los accesos de los usuarios a la base de datos. Excesivas

conexiones pueden provocar cuellos de botella en la red y bloqueos en algunos de los

recursos de la máquina.

Gestionar y optimizar el rendimiento de los procesos contra la base de datos. Esta será

una de las funciones más importantes del administrador, porque de nada sirve tener una

buena infraestructura montada si los colapsos son continuos y la lentitud en los accesos

es constante.

Planificación de los sistemas de backup y recuperación de los datos en caso de que sea

necesario.

Control del crecimiento de los archivos y procesos generados en el sistema por parte del

mismo SGBD.

ANALISIS INICIAL DE UN SGBD ORACLE:

Para establecer un entorno de trabajo en Oracle vamos a necesitar:

Software Oracle para servidor (Oracle Server Software): Obviamente, una versión

determinada específicamente diseñada para un sistema operativo concreto (UNIX,

Windows NT, etc.).

Page 6: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 6 

Este software incluye los ejecutables para el funcionamiento del propio gestor de la base

de datos, un conjunto de herramientas para el tratamiento de la información y un

software específico (Net8) para que sean posibles las conexiones de los usuarios al

servidor en arquitecturas cliente/servidor.

Software Oracle para cliente (Oracle Cliente Software): Este software se ubicará en

los puestos de trabajo de los usuarios (también bajo un determinado sistema operativo-

Windows 95, NT, etc.), el cual estará formado por un conjunto de herramientas

específicas para cliente/servidor (Designar/2000, Developper/2000, etc.) y de su

correspondiente software (Net8) para el establecimiento de las conexiones al servidor.

Archivos de base de datos: La base de datos en sí, los cuales serán creados a través de

herramientas o comandos específicos de Oracle. La ubicación de la base de datos se

realizará sobre los discos del propio servidor donde se ha establecido el Oracle Server

Software.

Recursos suficientes en nuestro servidor: Previamente, habrá que realizar un estudio

de nuestro sistema de información para conocer el alcance del mismo. Posteriormente,

habrá que estimar la cantidad de memoria, discos y unidades centrales de proceso que

van a ser necesarias para un correcto funcionamiento.

TELEPROCESO

Las telecomunicaciones comenzaron en 1830 con la utilización del Telégrafo, que

permitió diversos tipos de comunicaciones digitales utilizando códigos como el Morse

inventado por Samuel F. B. Morse en 1820. Morse comenzó a estudiar las

comunicaciones en 1830 teniendo preparada una máquina en 1835 compuesta en el

emisor por un conjunto de piezas con dientes correspondientes a las letras y las cifras

que ensambladas para formar un mensaje y pasadas a través del correspondiente

dispositivo, provocaban las sucesivas aperturas y cierres de un interruptor que producía

la señal enviada por la línea. En el receptor, un electroimán recibía dicha señal y

producía el desplazamiento de un lápiz que escribía en el papel la forma de la señal con

la que se podía descifrar el mensaje recibido.

Page 7: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 7 

Actualmente, en Telecomunicaciones se tiende al abaratamiento de la utilización de las

redes, así como a nuevas posibilidades de transmisión proporcionadas por las Redes

Digitales de Servicios Integrados de Banda Ancha que operan a gran velocidad.

Función de comunicaciones

Un sistema teleinformática básico consta de un Procesador Central (Host en la acepción

inglesa) auxiliado en las tareas de gestión de las comunicaciones por otro procesador de

menor capacidad denominado Unidad de Control de Comunicaciones o Procesador de

Comunicaciones (Front-en en la acepción inglesa). En el otro extremo se encuentra el

dispositivo que desea comunicar con el procesador central denominándose Terminal

Remoto y entre ambos se encuentra la Red de Telecomunicación en cuyo principio y fin

encontramos los convertidores-adaptadores para la comunicación denominados

Módems aunque pueden ser otro tipo de dispositivos según se transmita de una forma o

de otra.

Amplitud: La amplitud es la característica de las ondas sonoras que percibimos como

volumen. La amplitud es la máxima distancia que un punto del medio en que se propaga

la onda se desplaza de la posición de equilibrio; esta distancia corresponde al grado de

movimiento de las moléculas de aire en una onda sonora. Al aumentar su movimiento,

golpean el tímpano con una fuerza mayor, por lo que el oído percibe un sonido más

fuerte. Un tono con amplitudes baja, media y alta demuestra el cambio del sonido

resultante.

Page 8: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 8 

Frecuencia: Sistema de transmisión de radio en el que la onda portadora se modula de

forma que su frecuencia varíe según la señal de audio transmitida. El primer sistema

operativo de comunicación radiofónica fue descrito por el inventor norteamericano

Edwin H. Armstrong en 1936.

Control de línea

Tipos de ruido: Considerando que el ruido puede provocar errores en la comunicación

de datos, se puede definir al ruido como "señales eléctricas indeseables que introducen

el equipo o las perturbaciones naturales y degradan el rendimiento de una línea de

comunicaciones".

Conceptos

Ancho de banda: en comunicaciones, la diferencia entre la frecuencia más alta y la más

baja de un canal de transmisión, por ejemplo un radiotransmisor, una antena parabólica

o el cableado que conecta las computadoras en una red local; se mide en ciclos por

segundo (hercios, Hz). También se denomina ancho de banda a la cantidad de datos que

se pueden transmitir en determinado periodo de tiempo por un canal de transmisión; así

considerado, el ancho de banda se expresa en bits por segundo (bps). Por ejemplo, un

módem de 56 Kbps es capaz, en teoría, de enviar alrededor de 56.000 bits de datos por

segundo, mientras que una conexión de red Ethernet con un ancho de banda de 100

Mbps (cien millones de bips por segundo), puede enviar casi 1.800 veces más datos en

el mismo periodo de tiempo.

Baudio: Velocidad de señalización de una línea. Es la velocidad de conmutación, o el

número de transiciones (cambios de voltaje o de frecuencia) que se realiza por segundo.

Sólo a velocidades bajas, los baudios son iguales a los bits por segundo; por ejemplo,

300 baudios equivalen a 300 bps. Sin embargo, puede hacerse que un baudio represente

más de un bit por segundo. Por ejemplo, el modem V.22bis genera 1,200 bps a 600

baudios.

Page 9: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 9 

SERVIDOR DE ARCHIVOS

Un servidor en informática o computación es:

Una aplicación informática que realiza algunas tareas por parte de los usuarios. Esto se

divide normalmente en servicios de archivos, que permite a los usuarios almacenar y

acceder a los archivos de un ordenador común; y servicios de aplicaciones, en el que los

programas llevan a cabo instrucciones para realizar algunas tareas para los usuarios.

Este es el significado original del término.

El término se utiliza ahora para denominar al ordenador en el que se ejecutan los

programas. Al principio los programas del servidor se colocaban en un ordenador

central o miniordenador. Estos han sido remplazados por ordenadores construidos

utilizando una versión más robusta de la tecnología del microprocesador que la utilizada

en los ordenadores personales, y el término servidor fue adoptado para describir a los

ordenadores basados en esos microprocesadores.

Componentes del servidor

Un servidor comparte sus recursos (periféricos y almacenamiento de archivos) con los

ordenadores de los clientes en una red. Es posible que un ordenador sea cliente y

servidor simultáneamente, conectando a sí mismo otro ordenador por el mismo

procedimiento.

Muchos de los nuevos dispositivos vienen con funciones de servidor. El X-Internet,

Web Cervices y la iniciativa Microsoft NET pueden hacer que hasta el sistema más

pequeño funcione como servidor.

Muchas grandes empresas emplean numerosos servidores para cubrir sus necesidades.

Un conjunto de servidores en un sitio es conocido como torre de servidores.

Sistemas operativos de servidores

El aumento de los servidores basados en microprocesador fue facilitado por el

desarrollo de varias versiones de Unix para ser ejecutadas en la arquitectura del

Page 10: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 10 

microprocesador Intel, como Solares, Linux y FreeBSD. Los sistemas operativos de la

familia Microsoft Windows incluyen versiones de servidores que soportan multitareas y

otras características necesarias para los servidores, comenzando por Windows NT.

Los ordenadores centrales y los miniordenadores se usaban en un principio a través de

falsos terminales que no podían realizan las tareas de procesamiento más importantes.

Esto tuvo como consecuencia el uso cada vez mayor de los ordenadores personales por

parte de los usuarios.

Que es un servidor de archivos

Tipo de servidor de red de ordenadores cuya función es permitir el acceso remoto a

archivos almacenados o directamente accesibles por este. En principio, cualquier

ordenador conectado a una red con un software apropiado, puede funcionar como

servidor de archivos. Desde el punto de vista del cliente de un servidor de archivos, la

localización de los archivos compartidos es transparente. O sea, normalmente no hay

diferencias perceptibles si un archivo esta almacenado en un servidor de archivos

remoto o en el disco de la propia máquina.

Algunos protocolos comúnmente utilizados en servidores de archivos:

SMB/CIFS (Windows, Samba en Unix) NFS (Unix)

Page 11: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 11 

CLIENTE-SERVIDOR

QUE ES UN CLIENTE

Es el que inicia un requerimiento de servicio. El requerimiento inicial puede convertirse

en múltiples requerimientos de trabajo a través de redes LAN o WAN. La ubicación de

los datos o de las aplicaciones es totalmente transparente para el cliente.

QUE ES UN SERVIDOR

Es cualquier recurso de cómputo dedicado a responder a los requerimientos del cliente.

Los servidores pueden estar conectados a los clientes a través de redes LANs o WANs,

para proveer de múltiples servicios a los clientes y ciudadanos tales como impresión,

acceso a bases de datos, fax, procesamiento de imágenes, etc.

ELEMENTOS DE LA ARQUITECTURA CLIENTE/SERVIDOR

En esta aproximación, y con el objetivo de definir y delimitar el modelo de referencia de

una arquitectura Cliente/Servidor, debemos identificar los componentes que permitan

articular dicha arquitectura, considerando que toda aplicación de un sistema de

información está caracterizada por tres componentes básicos:

Presentación/Captación de Información

Procesos

Almacenamiento de la Información

Aplicaciones Cliente/Servidor

Y se integran en una arquitectura Cliente/Servidor en base a los elementos que

caracterizan dicha arquitectura, es decir:

Puestos de Trabajo

Comunicaciones

Servidores

Page 12: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 12 

Arquitectura Cliente/Servidor

El Puesto de Trabajo o Cliente

Una Estación de trabajo o microcomputador (PC: Computador Personal) conectado a

una red, que le permite acceder y gestionar una serie de recursos» el cual se perfila

como un puesto de trabajo universal. Nos referimos a un microcomputador conectado al

sistema de información y en el que se realiza una parte mayoritaria de los procesos.

Se trata de un fenómeno en el sector informático. Aquellos responsables informáticos

que se oponen a la utilización de los terminales no programables, acaban siendo

marginados por la presión de los usuarios.

Debemos destacar que el puesto de trabajo basado en un microcomputador conectado a

una red, favorece la flexibilidad y el dinamismo en las organizaciones. Entre otras

razones, porque permite modificar la ubicación de los puestos de trabajo, dadas las

ventajas de la red.

Los Servidores o Back-end

Una máquina que suministra una serie de servicios como Bases de Datos, Archivos,

Comunicaciones,...).

Los Servidores, según la especialización y los requerimientos de los servicios que debe

suministrar pueden ser:

Mainframes

Miniordenadores

Especializados (Dispositivos de Red, Imagen, etc.)

Una característica a considerar es que los diferentes servicios, según el caso, pueden ser

suministrados por un único Servidor o por varios Servidores especializados.

Las Comunicaciones

En sus dos vertientes:

Infraestructura de redes

Infraestructura de comunicaciones

Page 13: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 13 

Infraestructura de redes

Componentes Hardware y Software que garantizan la conexión física y la transferencia

de datos entre los distintos equipos de la red.

Infraestructura de comunicaciones

Componentes Hardware y Software que permiten la comunicación y su gestión, entre

los clientes y los servidores.

La arquitectura Cliente/Servidor es el resultado de la integración de dos culturas. Por un

lado, la del Mainframe que aporta capacidad de almacenamiento, integridad y acceso a

la información y, por el otro, la del computador que aporta facilidad de uso (cultura de

PC), bajo costo, presentación atractiva (aspecto lúdico) y una amplia oferta en productos

y aplicaciones.

CARACTERISTICAS DEL MODELO CLIENTE/SERVIDOR

En el modelo CLIENTE/SERVIDOR podemos encontrar las siguientes características:

1. El Cliente y el Servidor pueden actuar como una sola entidad y también pueden

actuar como entidades separadas, realizando actividades o tareas independientes.

2. Las funciones de Cliente y Servidor pueden estar en plataformas separadas, o en la

misma plataforma.

3. Un servidor da servicio a múltiples clientes en forma concurrente.

4. Cada plataforma puede ser escalable independientemente. Los cambios realizados en

las plataformas de los Clientes o de los Servidores, ya sean por actualización o por

reemplazo tecnológico, se realizan de una manera transparente para el usuario final.

5. La interrelación entre el hardware y el software están basados en una infraestructura

poderosa, de tal forma que el acceso a los recursos de la red no muestra la complejidad

de los diferentes tipos de formatos de datos y de los protocolos.

6. Un sistema de servidores realiza múltiples funciones al mismo tiempo que presenta

una imagen de un solo sistema a las estaciones Clientes. Esto se logra combinando los

recursos de cómputo que se encuentran físicamente separados en un solo sistema lógico,

proporcionando de esta manera el servicio más efectivo para el usuario final.

Page 14: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 14 

También es importante hacer notar que las funciones Cliente/Servidor pueden ser

dinámicas. Ejemplo, un servidor puede convertirse en cliente cuando realiza la solicitud

de servicios a otras plataformas dentro de la red.

Su capacidad para permitir integrar los equipos ya existentes en una organización,

dentro de una arquitectura informática descentralizada y heterogénea.

7. Además se constituye como el nexo de unión mas adecuado para reconciliar los

sistemas de información basados en mainframes o minicomputadores, con aquellos

otros sustentados en entornos informáticos pequeños y estaciones de trabajo.

8. Designa un modelo de construcción de sistemas informáticos de carácter distribuido.

Su representación típica es un centro de trabajo (PC), en donde el usuario dispone de

sus propias aplicaciones de oficina y sus propias bases de datos, sin dependencia directa

del sistema central de información de la organización, al tiempo que puede acceder a los

Recursos de este host central y otros sistemas de la organización ponen a su servicio.

En conclusión, Cliente/Servidor puede incluir múltiples plataformas, bases de datos,

redes y sistemas operativos. Estos pueden ser de distintos proveedores, en arquitecturas

propietarias y no propietarias y funcionando todos al mismo tiempo. Por lo tanto, su

implantación involucra diferentes tipos de estándares: APPC, TCP/IP, OSI, NFS,

DRDA corriendo sobre DOS, OS/2, Windows o PC UNIX, en TokenRing, Ethernet,

FDDI o medio coaxial, sólo por mencionar algunas de las posibilidades.

TIPOS DE CLIENTES

"cliente flaco":

Servidor rápidamente saturado.

Gran circulación de datos de interface en la red.

"cliente gordo":

Casi todo el trabajo en el cliente.

No hay centralización de la gestión de la BD.

Gran circulación de datos inútiles en la red.

Page 15: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 15 

TIPOS DE SERVIDOR

Servidores de archivos

Servidor donde se almacena archivos y aplicaciones de productividad como por ejemplo

procesadores de texto, hojas de cálculo, etc.

Servidores de bases de datos

Servidor donde se almacenan las bases de datos, tablas, índices. Es uno de los

servidores que más carga tiene.

Servidores de transacciones

Servidor que cumple o procesa todas las transacciones. Valida primero y recién genera

un pedido al servidor de bases de datos.

Servidores de Groupware

Servidor utilizado para el seguimiento de operaciones dentro de la red.

Servidores de objetos

Contienen objetos que deben estar fuera del servidor de base de datos. Estos objetos

pueden ser videos, imágenes, objetos multimedia en general.

Servidores Web

Se usan como una forma inteligente para comunicación entre empresas a través de

Internet.

Page 16: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 16 

Este servidor permite transacciones con el acondicionamiento de un browser específico.

Estilos del modelo cliente servidor

Funciones de un programa servidor

Espera las solicitudes de los clientes.

Ejecuta muchas solicitudes al mismo tiempo.

Atiende primero a los clientes VIP.

Emprende y opera actividades de tareas en segundo plano.

Se mantiene activa en forma permanente.

INSTALACIÓN DE ORACLE 9I

CÓMO INSTALAR ORACLE CLIENT EN WINDOWS

(CLIENTE DE ORACLE)

Este artículo muestra paso a paso cómo instalar Oracle Cliente (utilidad de Oracle que

se ha de instalar en los PCs que queramos que tengan acceso al Servidor de Oracle):

En primer lugar necesitaremos disponer de los CDs de instalación que están disponibles

gratuitamente en la web: Oracle.

Page 17: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 17 

Pulsaremos en "Siguiente" y seleccionamos el destino (carpeta) de instalación:

Seleccionaremos "Oracle9i Cliente”:

Page 18: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 18 

Dependiendo de las utilidades que queramos instalar seleccionaremos "Administrador"

(instala todas las herramientas para administrar Oracle desde un PC Cliente), "Runtime"

(instala las herramientas básicas para acceso a Oracle, es la recomendada) ó

"Personalizada" (permite seleccionar las herramientas a instalar):

Dejaremos el puerto por defecto 2030 para "Oracle Services para Microsoft Transaction

Server". Este puerto no es relevante si no tenemos un Cluster de servidores:

Page 19: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 19 

Una vez comprobadas las herramientas que se van a instalar pulsaremos en "Instalar":

Tras la instalación realizaremos la configuración de red de Oracle:

Page 20: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 20 

Desmarcaremos la opción "Realizar una configuración típica" y pulsaremos en

"Siguiente".

Marcamos "No, deseo diferir la configuración" y pulsamos en "Siguiente".

Page 21: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 21 

Pulsamos en "Siguiente".

Marcamos "Base de datos o servicio Oracle8i o posterior" y pulsamos en "Siguiente".

Introducimos el nombre del servicio que, normalmente, coincidirá con el nombre de la

base de datos a la que nos conectaremos:

Page 22: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 22 

Seleccionamos el protocolo TCP y pulsamos en "Siguiente".

Introducimos el nombre o IP del PC que tiene la base de datos de Oracle (servidor de

Oracle) y pulsamos en "Siguiente".

Page 23: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 23 

Si aparece algún error en la primera prueba de conexión es habitual pues utiliza el

usuario y contraseña que Oracle configura por defecto. Para probar la conexión

correctamente pulsaremos en "Cambiar Conexión" e introduciremos un usuario y

contraseña existentes en la Base de Datos. Si no hay problemas mostrará "Conectado...

Prueba realizada correctamente".

Introduciremos el nombre de red, que por defecto será el mismo que el nombre de la

base de datos y pulsamos en "Siguiente".

Pulsamos en "Siguiente".

Page 24: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 24 

Pulsamos en "Siguiente".

Pulsamos en "Terminar".

Page 25: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 25 

Pulsamos en "Salir".

Con esto habremos concluido la instalación de Oracle Cliente, ahora nos aparecerá un

nuevo Driver ODBC:

CONEXIÓN NATIVE- CONEXIÓN OBDC

TNSNAMES.ORA Network Configuration File:

E:\oracle\ora81\network\admin\tnsnames.ora

# Generated by Oracle configuration tools.

INST1_HTTP =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = colossus)(PORT = 1521))

)

(CONNECT_DATA =

(SERVER = SHARED)

(SERVICE_NAME = harolpiz)

(PRESENTATION = http://admin)

)

)

Page 26: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 26 

EXTPROC_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

)

(CONNECT_DATA =

(SID = PLSExtProc)

(PRESENTATION = RO)

)

)

HAROLPIZ =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = colossus)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = harolpiz)

)

)

seta as la clase que tengo para la conexion:

import java.sql.*;

import java.sql.Connection;

public class OracleConecta {

public static void main(String args[]) {

String usuario = "system";

String password = "harolpiz";

String host = "localhost";

String puerto = "1521";

String sid = "XE";

Page 27: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 27 

String driver = "oracle.jdbc.driver.OracleDriver";

String ulrjdbc = "jdbc:oracle:thin:@" + host + ":"+ puerto + ":" + sid +","+usuario + ","

+ password ;

Connection connection = null;

try {

Class.forName(driver).newInstance();

connection = DriverManager.getConnection(ulrjdbc);

// objeto connection creado

ResultSet result = connection.createStatement().executeQuery("SELECT 'carlos' FROM

USUARIOS");

result.next();

System.out.println(result.getString(1));

} catch (Exception e) {

e.printStackTrace();

} finally {

if (connection != null) {

try {

connection.close();

} catch (SQLException e) {

1.- Damos click en Inicio>Panel de Control >Herramientas administrativas

(Administrative Tools)> Data Sources (ODBC).

Page 28: Manual Oracle 9i

UN

 

Sistem

2.- N

dond

(Si p

acces

3

NIVERSIDA

mas             

Nos vamos

de se proces

por ejemplo

so al ODBC

.- Buscamo

AD REGION

                      

a la pestañ

sa la aplicac

o solo quer

C es en la pe

os el cliente

NAL AUTÓ

         Autor

ña System D

ción puedan

remos que

estaña User

de Oracle q

NOMA DE 

r: Diego Sán

DSN, para

n ocupar el O

el usuario

r DSN).

que se tiene

Finish.

 LOS ANDE

nchez 

que todos

ODBC, y da

que se log

instalado y

ES “UNIAND

los usuario

amos click

ggea en esa

y damos clic

DES”   MANORAC

Págin

s de la ma

en el botón

a máquina

ck en el botó

UAL CLE 9i 

na 28 

quina

Add.

tenga

ón

Page 29: Manual Oracle 9i

UN

 

Sistem

4.- P

TNS

5.- P

TNS

cone

NIVERSIDA

mas             

Posteriorme

NAME.ora

Ponemos lo

NAME, y

ctar. Damo

AD REGION

                      

ente, debem

a que se encu

os datos de

elegimos e

s click en T

NAL AUTÓ

         Autor

mos tener

uentra en la

el Data So

l TNS Serv

Test Connec

NOMA DE 

r: Diego Sán

configurado

a carpeta de

ource Name

vice Name

ction.

 LOS ANDE

nchez 

o el usuari

instalación

e que es e

y el usuari

ES “UNIAND

io de la a

n de Oracle.

el SID de

io con el cu

DES”   MANORAC

Págin

aplicación e

conexion

ual nos vam

UAL CLE 9i 

na 29 

en el

en el

mos a

Page 30: Manual Oracle 9i

UN

 

Sistem

6.- E

NIVERSIDA

mas             

Especificamo

AD REGION

                      

os el Passw

NAL AUTÓ

         Autor

word y damo

NOMA DE 

r: Diego Sán

os click en O

 LOS ANDE

nchez 

Ok

ES “UNIAND

DES”   MANORAC

Págin

UAL CLE 9i 

na 30 

Page 31: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 31 

HERRAMIENTA SQL PLUS

Historia del lenguaje SQL

El nacimiento del lenguaje SQL data de 1970 cuando E. F. Codd publica su libro: "Un

modelo de datos relacional para grandes bancos de datos compartidos". Ese libro

dictaría las direcrices de las bases de datos relacionales. Apenas dos años después IBM

(para quien trabajaba Codd) utiliza las directrices de Codd para crear el Standard

English Query Language (Lenguaje Estándar Inglés para Consultas) al que se

llamó SEQUEL. Más adelante se le asignaron las siglas SQL (aunque en inglés se

siguen pronunciando SEQUEL, en español se le llama esecuele).

Poco después se convertía en un estándar en el mundo de las bases de datos avalando

por los organismos ISO y ANSI. Aún hoy sigue siendo uno de los estándares más

importantes de la industria informática.

Actualmente el último estándar es el SQL del año 1999 que amplió el anterior estándar

conocido como SQL 92. El SQL de Oracle es compatible con el SQL del año 1999 e

incluye casi todo lo dictado por dicho estándar.

SQL*Plus

Para poder escribir sentencias SQL al servidor Oracle, éste incorpora la herramienta

SQL*Plus. Toda instrucción SQL que el usuario escribe, es verificada por este

programa. Si la instrucción es válida es enviada a Oracle, el cual enviará de regreso la

respuesta a la instrucción; respuesta que puede ser transformada por el programa

SQL*Plus para modificar su salida.

Para que el programa SQL*Plus funcione en el cliente, el ordenador cliente debe haber

sido configurado para poder acceder al servidor Oracle. En cualquier caso al acceder a

Oracle con este programa siempre preguntará por el nombre de usuario y contraseña.

Estos son datos que tienen que nos tiene que proporcionar el administrador (DBA) de la

base de datos Oracle.

Para conectar mediante SQL*Plus podemos ir a la línea de comandos y escribir el texto

sqlplus. A continuación aparecerá la pantalla:

Page 32: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 32 

En esa pantalla se nos pregunta el nombre de usuario y contraseña para acceder a la base

de datos (información que deberá indicarnos el administrador o DBA). Tras indicar esa

información conectaremos con Oracle mediante SQL*Plus, y veremos aparecer el

símbolo:

SQL>

Tras el cual podremos comenzar a escribir nuestros comandos SQL. Ese símbolo puede

cambiar por un símbolo con números 1, 2, 3, etc.; en ese caso se nos indica que la

instrucción no ha terminado y la línea en la que estamos.

Otra posibilidad de conexión consiste en llamar al programa SQL*Plus indicando

contraseña y base de datos a conectar. El formato es:

slplus usuario/contraseña@nombreServicioBaseDeDatos

Ejemplo:

slplus usr1/[email protected]

En este caso conectamos con SQL*Plus indicando que somos el usuario usr1 con

contraseña miContra y que conectamos a la base de datos inicial de la red forempa.net.

El nombre de la base de datos no tiene porque tener ese formato, habrá que conocer

como es el nombre que representa a la base de datos como servicio de red en la red en la

que estamos.

Versión gráfica de SQL*Plus

Oracle incorpora un programa gráfico para Windows para utilizar SQL*Plus. Se puede

llamar a dicho programa desde las herramientas instaladas en el menú de programas de

Page 33: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 33 

Windows, o desde la línea de programas escribiendo sqlplusw. Al llamarle aparece esta

pantalla:

.

Como en el caso anterior, se nos solicita el nombre de usuario y contraseña. La cadena

de Host es el nombre completo de red que recibe la instancia de la base de datos a la que

queremos acceder en la red en la que nos encontramos.

También podremos llamar a este entorno desde la línea de comandos utilizando la

sintaxis comentada anteriormente. En este caso:

slplusw usuario/contraseña@nombreServicioBaseDeDatos

Esta forma de llamar al programa permite entrar directamente sin que se nos pregunte

por el nombre de usuario y contraseña.

iSQL*Plus

Es un producto ideado desde la versión 9i de Oracle. Permite acceder a las bases de

datos Oracle desde un navegador. Para ello necesitamos tener configurado un servidor

web.

Oracle que permita la conexión con la base de datos. Utilizar iSQL*Plus es indicar una

dirección web en un navegador, esa dirección es la de la página iSQL*Plus de acceso a

la base de datos.

Desde la página de acceso se nos pedirá nombre de usuario, contraseña y nombre de la

base de datos con la que conectamos (el nombre de la base de datos es el nombre con el

que se la conoce en la red). Si la conexión es válida aparece esta pantalla:

Page 34: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 34 

En esa pantalla en el apartado Introducir Sentencias, se escribe la sentencia que

deseamos enviar. El botón Ejecutar hace que se valide y se envíe a Oracle.

Se pueden almacenar sentencias SQL usando el botón Examinar y cargar sentencias

previamente guardadas mediante Cargar archivos de comandos.

ESTRUCTURA DEL LENGUAJE SQL

SELECT. Se trata del comando que permite realizar consultas sobre los datos de la

base de datos. Obtiene datos de la base de datos.

DML, Data Manipulation Language (Lenguaje de manipulación de datos). Modifica

filas (registros) de la base de datos. Lo forman las instrucciones

INSERT, UPDATE, MERGE y DELETE.

DDL, Data Definition Language (Lenguaje de definición de datos).

Page 35: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 35 

Permiten modificar la estructura de las tablas de la base de datos. Lo forman las

instrucciones CREATE, ALTER, DROP, RENAME y TRUNCATE.

Instrucciones de transferencia. Administran las modificaciones creadas por las

instrucciones DML. Lo forman las instrucciones ROLLBACK, COMMIT y

SAVEPOINT

DCL, Data Control Language (Lenguaje de control de datos). Administran los

derechos y restricciones de los usuarios. Lo forman las instrucciones GRANT y

REVOKE.

Normas de escritura

En SQL no se distingue entre mayúsculas y minúsculas. Da lo mismo como se escriba.

El final de una instrucción lo calibra el signo del punto y coma

Los comandos SQL (SELECT, INSERT,...) no pueden ser partidos por espacios o saltos

de línea antes de finalizar la instrucción. El intérprete SQL plus indicas

Se pueden tabular líneas para facilitar la lectura si fuera necesario

Los comentarios en el código SQL comienzan por /* y terminan por */

Terminología

SQL

Structured Query Language o Lenguaje de Consultas Estructurado. Es el lenguaje que

permite la comunicación con el Sistema Gestor de Bases de Datos (Oracle en nuestro

caso).

El SQL es un lenguaje unificado

Lo utilizan todo tipo de usuarios, desde el administrador de la base de datos, DBA,

hasta el usuario final.

El SQL es un lenguaje no procedimental.

El usuario especifica Qué quiere, no Cómo ni Dónde conseguirlo.

El SQL es relacionalmente completo.

Permite la realización de cualquier consulta de datos.

SQL= DDL + DML

Las sentencias del SQL se clasifican como parte del DDL o del DML.

Page 36: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 36 

Lenguaje de Definición de Datos, DDL sentencias del SQL que permiten definir los

objetos de la Base de Datos (create, revoke, grant, alter, etc.). Cuando se definen dichos

objetos se almacenan en el diccionario de datos.

Lenguaje de Manipulación de Datos, DML sentencias del SQL que se utilizan para

manejar los datos de la base de datos (select, insert, update, delete, etc).

commit/rollback cada vez que se realiza alguna operación en la base de datos se realiza

no sobre la tabla en sí, sino sobre una copia local de la misma. Así, si queremos que los

resultados de la modificación se trasladen a la base de datos y perduren en el tiempo hay

que confirmar dicha operación con el comando commit. También se puede impedir que

los últimos cambios lleguen a efectuarse con rollback, aunque existen algunas

sentencias SQL que se 'autoconfirman' y no se pueden volver atrás.

Diccionario de la Base de Datos

Guarda la definición de todos los objetos almacenados en la base de datos; sus

características, restricciones, privilegios, relaciones entre ellos, etc.

ARQUITECTURA ORACLE

Todo el mundo puede conducir un automóvil sin necesidad de conocer cómo funciona

un motor de combustión interna y todos los subsistemas asociados a él. Pero entonces

ciertos conceptos como aprovechamiento de la potencia, compresión, endurecimiento de

la suspensión, motricidad, etc., le serán ajenos y nunca podrá sacar lo mejor del

automóvil. Y si tiene algún problema se quedará tirado en la carretera.

De la misma manera, no podremos aspirar a que nuestras aplicaciones de BD funcionen

bien si no conocemos la arquitectura del motor de la BD, el servidor. Es indispensable

conocer los factores y parámetros que influyen en el funcionamiento de nuestro SGBD

para poder solucionar los problemas que se pueden plantear en cuanto nos salgamos de

las aplicaciones estándares y básicas de BD, o en cuanto tengamos algún problema.

El siguiente curso aborda la arquitectura del SGBD Oracle y da una visión lo

suficientemente profunda del mismo como para que podamos entender cómo funciona.

Si tienes cualquier sugerencia o encuentras una errata escondida dímelo.

Page 37: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 37 

Bases de Datos e Instancias

Estos son dos conceptos fundamentales para entender la arquitectura de Oracle.

En términos sencillos, una instancia de BD es un conjunto de procesos del servidor

Oracle que tiene su propia área global de memoria y una base de datos asociada a ellos.

Base de Datos

Una Base de Datos Oracle es un conjunto de datos almacenado y accesible según el

formato de tablas relacionales. Una tabla relacional tiene un nombre y unas columnas,

su definición. Los datos están almacenados en las filas. Las tablas pueden estar

relacionadas con otras.

Una Base de Datos Oracle está almacenada físicamente en ficheros, y la

correspondencia entre los ficheros y las tablas es posible gracias a las estructuras

internas de la BD, que permiten que diferentes tipos de datos estén almacenados

físicamente separados. Está división lógica se hace gracias a los espacios de tablas,

tablespaces.

CREAR UN TABLESPACE

 

Un tablespace es el archivo donde se almacenarán las tablas y datos de usuario. No es

más que un archivo físico donde oracle almacenará esos datos

Ejemplo

CREATE TABLESPACE MD_DATA

DATAFILE

'mddata01.dbf' SIZE 1000M,

'mddata02.dbf' SIZE 1000M

AUTOEXTEND ON NEXT 5M MAXSIZE 200000M;

Sintaxis

CREATE TABLESPACE [DATAFILE clause] [MINIMUM EXTENT integer[K|M]]

[BLOCKSIZE integer [K]] [LOGGING|NOLOGGING] [DEFAULT storage_clause ]

[ONLINE|OFFLINE] [PERMANENT|TEMPORARY] where:tablespace is the name of

the tablespace to be created

Page 38: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 38 

DATAFILE specifies the data file or data files that make up the tablespace

MINIMUM EXTENT

ensures that every used extent size in the tablespace is

a multiple of the integer. Use Kor M to specify this

size in kilobytes or megabytes.

specifies that, by default, all tables, indexes, and partitions

LOGGING

within the tablespace have all changes written to redo.

LOGGING is the default.

specifies that, by default, all tables, indexes, and partitions

NOLOGGING

within the tablespace do not have all changes written to redo.

NOLOGGING affects only some DML and DDL commands,

for example, direct loads.

specifies the default storage parameters for all objects created

DEFAULT

in the tablespace creation

makes the tablespace unavailable immediately after creation

OFFLINE

specifies that the tablespace can be used to hold permanent

PERMANENT

objects

specifies that the tablespace be used only to hold temporary

TEMPORARY

objects; for example, segments used by implicit sorts caused

by an ORDER BY clause extent_management_clause

specifies how the extents of the tablespace are managed. This

clause is discussed in a subsequent section of this lesson.

datafile_clause :== filename

[SIZE integer[K|M] [REUSE] | REUSE ] [ autoextend_clause ]

where: is the name of a data file in the tablespace

filename

specifies the size of the file. Use K or M to

Page 39: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 39 

SIZE

specify the size in kilobytes or megabytes.

allows the Oracle server to reuse an existing file

REUSE

enables or disables the automatic extension of

autoextend_clause

the data file. This clause is discussed in a

subsequent section of this lesson.

ALTERAR UN TABLESPACE

 

Alterar el tamaño de un tablespace

 

ALTER DATABASE DATAFILE '/mi/tablespace/datafile.dbf' RESIZE 300M;

Alterar el tamaño máximo

alter database datafile 'mi/tablespace.dbf' autoextend on maxsize 1000M

Añadir un datafile a un tablespace

alter tablespace MI_TABLESPACE add datafile '/path/del/datafile.dbf' size 2048M

AUTOEXTEND ON NEXT 50M MAXSIZE 4096M;

BORRAR UN TABLESPACE

 

DROP TABLESPACE tablespace_name [INCLUDING CONTENTS [AND

DATAFILES]

[CASCADE CONSTRAINTS]];

Los Espacios de Tablas, Tablespaces

Un espacio de tablas es una división lógica de la BD. Cada BD tiene al menos uno

(SYSTEM). Un espacio de tablas puede pertenecer sólo a una BD. Los espacios de

tablas se utilizan para mantener juntos los datos de usuarios o de aplicaciones para

facilitar su mantenimiento o mejorar las prestaciones del sistema.

Page 40: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 40 

De esta manera, cuando se crea una tabla se debe indicar el espacio de tablas al que se

destina. Por defecto se depositan en el espacio de tablas SYSTEM, que se crea por

defecto. Este espacio de tablas es el que contiene el diccionario de datos, por lo que

conviene reservarlo para el uso del servidor, y asignar las tablas de usuario a otro.

Lo razonable y aconsejable es que cada aplicación tenga su propio espacio de tablas.

Hay varias razones que justifican este modo de organización de las tablas en espacios de

tablas:

Un espacio de tablas puede quedarse offline debido a un fallo de disco,

permitiendo que el SGBD continúe funcionando con el resto.

Los espacios de tablas pueden estar montados sobre dispositivos ópticos si son

de sólo lectura.

Permiten distribuir a nivel lógico/físico los distintos objetos de las aplicaciones.

Son una unidad lógica de almacenamiento, pueden usarse para aislar

completamente los datos de diferentes aplicaciones.

Oracle permite realizar operaciones de backup/recovery a nivel de espacio de

tabla mientras la BD sigue funcionando.

Cuando se crean se les asigna un espacio en disco que Oracle reserva inmediatamente, e

utilice o no. Si este espación inicial se ha quedado pequeño Oracle puede gestionar el

crecimiento dinámico de los ficheros sobre los que se asientan los espacios de tablas.

Esto elimina la posibilidad de error en las aplicaciones por fallos de dimensionamiento

inicial. Los parámetros de crecimiento del tamaño de los espacios de tablas se

especifican en la creación de los mismos.

Se pueden ver los espacios de tablas definidos en nuestra BD con el comando SQL

siguiente:

SQL> select * from user_tablespaces;

Dentro de cada espacio de tabla se pueden almacenar objetos de distinta naturaleza:

tablas, índices, etc. Pero no se pueden mezclar si más. Necesitamos una manera de

separarlos, y eso son los segmentos.

Se pueden almacenar más de un segmento por espacio de tabla. Un segmento está

contenido en su totalidad en un espacio de tabla. Un segmento está constituido por un

Page 41: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 41 

conjunto de extensiones, que no son más que grupos de bloques de disco ORACLE

contiguos. Cuando se borra un segmento, el espacio es devuelto al espacio de tabla.

Todos los datos de la BD están almacenados en segmentos. Y existen 5 tipos de

segmentos:

De datos: almacenan las tablas.

De índices: permiten un acceso rápido a los datos dependiendo de la cantidad de los

mismos (árboles B). Las consultas que sólo referencian a columnas indexadas se

resuelven en el índice. Establecen un control de unicidad (los índices son automáticos

cuando se definen claves primarias). Cada índice ocupa un segmento independiente del

segmento de datos y deberían estar en un espacio de tablas distinto al de los datos, para

mejorar el rendimiento.

De rollback: son objetos internos de la BD que permiten efectuar la restauración de las

transacciones no validadas asegurando la consistencia en lectura. La estructura de los

registros de rollback es :

Identificador de la transacción.

Dirección del bloque donde está la tabla.

Número de fila.

Número de columna.

Valor del dato antiguo (antes de ser modificado).

Son tan importantes que una BD no puede arrancar si no puede acceder al menos a un

segmento de rollback. Si la BD tiene múltiples espacios de tablas, deben existir al

menos dos segmentos de rollback y cada segmento de rollback debe tener al menos dos

extensiones, reutilizables de manera cíclica. Esto segmentos son un objeto compartido

de la BD, aunque se puede asinar un segmento de rollback particular a una transacción

dada.

Temporales: son creados por Oracle para un uso temporal cuando debe realizar una

ordenación que no le cabe en memoria, y en las operaciones: create index, order by,

group by, distinct, union, intersect, minus. Son eliminados cuando la sentencia finaliza.

De bootstrap: Se crea en SYSTEM y contiene definiciones del diccionario para sus

tablas, que se cargan al abrir la BD. No requiere ninguna acción por parte del DBA. No

cambia de tamaño.

La tabla que guarda la información de los segmentos de usuario es user_segments, y se

puede visualizar la información sobre los segmentos con la sentencia SQL siguiente:

Page 42: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 42 

SQL> select * from user_segments;

FICHEROS

Cada espacio de tablas se compone de uno o más ficheros en disco. Un fichero puede

pertenecer sólo a un espacio de tablas. Los ficheros reciben un tamaño fijo en el

momento de su creación, y cuando se necesita más espacio se deben añadir más ficheros

a espacio de tablas.

Dividir los objetos de la BD entre múltiples espacios de tablas permiten que los objetos

sean almacenados físicamente en discos separados, dependiendo de donde estén los

ficheros sobre los que se asientan.

INSTANCIAS

Para permitir el acceso a los datos, Oracle utiliza un conjunto de procesos que son

compartidos por todos los usuarios. Además, existen estructuras de memoria que son

utilizadas para almacenar los datos más recientemente solicitados a la BD.

Una instancia de BD es el conjunto de estructuras de memoria y de procesos que

acceden a los ficheros de datos.

Los parámetros que determinan el tamaño y composición de una instancia están

almacenados en un fichero llamado init.ora. Este fichero es leido durante el arranque de

la BD y puede ser modificado por el DBA. Cualquier modificación de este fichero no

tiene efecto hasta la siguiente vez que se arranque la BD.

Las estructuras de la BD Oracle pueden ser divididas en tres clases:

Aquellas que son internas a la BD,

Aquellas que son internas a las áreas de memoria (incluidas la memoria compartida y

procesos),

Aquellas que son externas a la BD.

Page 43: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 43 

ESTRUCTURAS INTERNAS DE LA BD

TABLAS Y COLUMNAS

Los datos son almacenados en la BD utilizando tablas. Cada tabla está compuesta por

un número determinado de columnas.

Las tablas propiedad del usuario SYS son llamadas tablas del diccionario de datos.

Proveen el catálogo del sistema que permite que la BD se gestione a sí misma.

Las tablas se pueden relacionar entre ellas a través de las columnas que las componen.

La BD se puede utilizar para asegurar el cumplimiento de esas relaciones a través de la

integridad referencial, que se concreta en las restricciones de tablas.

RESTRICCIONES DE TABLAS

Una tabla puede tener asociadas restricciones que deben cumplir todas las filas. Entre

las restricciones que se pueden fijar algunas reciben nombres especiales.: clave

primaria, clave ajena.

La clave primaria de una tabla está compuesta por las columnas que hacen a cada fila de

la tabla una fila distinta.

La clave ajena se utiliza para especificar las relaciones entre tablas. De modo que un

conjunto de columnas declaradas como clave ajena de una tabla deben tener valores

tomados de la clave primaria de otra tabla.

USUARIOS

Una cuenta de usuario no es una estructura física de la BD, pero está relacionada con los

objetos de la BD: los usuarios poseen los objetos de la BD. Existen dos usuarios

especiales: SYS y SYSTEM. El usuarios SYS posee las tablas del diccionario de datos;

que almacenan información sobre el resto de las estructuras de la BD. El usuario

SYSTEM posee las vistas que permiten acceder a las tablas del diccionario, para el uso

del resto de los usuarios de la BD.

Todo objeto creado en la BD se crea por un usuario, en un espacio de tablas y en un

fichero de datos determinado. Toda cuenta de la BD puede estár unida a una cuenta del

Page 44: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 44 

S.O., lo que permite a los usuarios acceder a la cuenta de la BD sin dar la clave de

acceso.

Cada usuario puede acceder a los objetos que posea o a aquellos sobre los que tenga

derecho de acceso.

ESQUEMAS

El conjunto de objetos de un usuario es conocido como esquema.

ÍNDICES

Un índice es una estructura de la BD utilizada para agilizar el acceso a una fila de una

tabla. Cada fila tiene un identificador de fila, ROWID, que determina el fichero, bloque

y fila dentro del bloque donde está almacenada la fila.

Cada entrada del índice consite en un valor clave y una ROWID. Cada una de estas

entradas se almacena en un árbol B+.

Los índices se crean automáticamente cuando se define una restricción UNIQUE o

PRIMARY KEY.

Clusters

Las tablas que son accedidas juntas frecuentemente pueden ser almacenadas juntas. Para

ello se crea un cluster. De este modo se minimiza el número de E/S.

Las columnas que relacionan las tablas de un cluster se llaman clave del cluster.

Vistas

Conceptualmente, una vista puede considerarse como una máscara que se extiende

sobre una o más tablas, de modo que cada columna de la vista se corresponde con una o

más columnas de las tablas subyacentes. Cuando se consulta una vista, esta traspasa la

consulta a las tablas sobre las que se asienta. Las vistas no se pueden indexar.

Las vistas no generan almacenamiento de datos, y sus definiciones se almacenan en el

diccionario de datos.

Page 45: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 45 

Secuencias

Las definiciones de secuencias se almacenan en el diccionario de datos. Son

mecanismos para obtener listas de números secuenciales.

PROCEDIMIENTOS Y FUNCIONES

Un procedimiento es un bloque de código PL/SQL, que se almacena en el diccionario

de datos y que es llamado por las aplicaciones. Se pueden utilizar para implementar

seguridad, no dando acceso directamente a determinadas tablas sino es a través de

procedimientos que acceden a esas tablas. Cuando se ejecuta un procedimiento se

ejecuta con los privilegios del propietario del procedimiento. La diferencia entre un

procedimiento y una función es que ésta última puede devolver valores.

Paquetes, Packages

Se utilizan para agrupar procedimientos y funciones. Los elementos dentro de los

paquetes pueden ser públicos o privados. Los públicos pueden ser llamados por los

usuarios, los privados están ocultos a los usuarios y son llamados por otros

procedimientos.

DISPARADORES, TRIGGERS

Son procedimientos que son ejecutados cuando se procude un determinado evento en la

BD. Se pueden utilizar para mejorar y reforzar la integridad y la seguridad de la BD.

Sinónimos

Para identificar completamente un objeto dentro de una BD se necesita especificar el

nombre de la máquina, el nombre del servidor, el nombre del propietario y el nombre

del objeto. Para hacer transparente todo esto al usuario se pueden utilizar los sinónimos.

Éstos apuntarán a los objetos y si el objeto cambia de lugar o propietario, sólo habrá que

modificar el sinónimo.

Existen sinónimos públicos y privados. Los públicos son conocidos por todos los

usuarios de una BD. Los privados son locales a un usuario.

Page 46: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 46 

PRIVILEGIOS Y ROLES

Para que un objeto pueda ser accedido por un usuario debe de tener otorgado ese

privilegio. Ejemplos de privilegios son INSERT, SELECT, UPDATE, EXECUTE, etc.

Los roles son grupos de privilegios que pueden ser utilizados para facilitar la gestión de

los privilegios. Los privilegios se pueden otorgar a un rol, y los roles pueden ser

otorgados a múltiples usuarios.

SEGMENTOS, EXTENSIONES Y BLOQUES

Los segmentos son los equivalentes físicos de los objetos que almacenan datos. El uso

efectivo de los segmentos requiere que el DBA conozca los objetos que utiliza una

aplicación, cómo los datos son introducidos en esos objetos y el modo en que serán

recuperados.

Como los segmentos son entidades físicas, deben estar asignados a espacios de tablas en

la BD y estarán localizados en uno de los ficheros de datos del espacio de tablas. Un

segmento está constituido por secciones llamadas extensiones, que son conjuntos

contiguos de bloques Oracle. Una vez que una extensión existente en un segmento no

puede almacenar más datos, el segmento obtendrá del espacio de tabla otra extensión.

Este proceso de extensión continuará hasta que no quede más espacio disponible en los

ficheros del espacio de tablas, o hasta que se alcance un número máximo de extensiónes

por segmento.

Segmento de Rollback

Para mantener la consistencia en lectura y permitir deshacer las transacciones, Oracle

debe tener un mecanismo para reconstruir la imágen previa a una transacción

incompleta. Oracle utiliza los segmentos de rollback para esto.

Los segmentos de rollback pueden crecer tanto como sea necesario para soportar las

transacciones.

Page 47: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 47 

Estructuras de Memoria Internas

Oracle mantiene dos estructuras principales de memoria: el Área Global de Programa,

Program Global Area, PGA; y el Área Global del Sistema, System Global Area o

también Shared Global Area, SGA.

El PGA es la zona de memoria de cada proceso Oracle. No está compartida y contiene

datos e información de control de un único proceso.

El SGA es la zona de memoria en la que la BD Oracle guarda información sobre su

estado. Esta estructura de memoria está disponible para todos los procesos, por eso se

dice que está compartida.

Área Global del Sistema, SGA

Sirve para facilitar la transferencia de información entre usuarios y también almacena la

información estructural de la BD más frecuentemente requerida.

La SGA se divide en varias partes:

Buffers de BD, Database Buffer Cache

Es el caché que almacena los bloques de datos leidos de los segmentos de datos de la

BD, tales como tablas, índices y clusters. Los bloques modificados se llamas bloques

sucios. El tamaño de buffer caché se fija por el parámetro DB_BLOCK_BUFFERS del

fichero init.ora.

Como el tamaño del buffer suele ser pequeño para almacenar todos los bloques de datos

leidos, su gestión se hace mediante el algoritmo LRU.

Buffer Redo Log

Los registros Redo describen los cámbios realizados en la BD y son escritos en los

ficheros redo log para que puedan ser utilizados en las operaciones de recuperación

hacia adelante, roll-forward, durante las recuperaciones de la BD. Pero antes de ser

escritos en los ficheros redo log son escritos en un caché de la SGA llamado redo log

buffer. El servidor escribe periódicamente los registros redo log en los ficheros redo

log.

El tamaño del buffer redo log se fija por el parámetro LOG_BUFFER.

Page 48: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 48 

Área de SQL Compartido, Shared SQL Pool

En esta zona se encuentran las sentencias SQL que han sido analizadas. El analisis

sintáctico de las sentencias SQL lleva su tiempo y Oracle mantiene las estructuras

asociadas a cada sentencia SQL analizada durante el tiempo que pueda para ver si puede

reutilizarlas. Antes de analizar una sentencia SQL, Oracle mira a ver si encuentra otra

sentencia exactamente igual en la zona de SQL compartido. Si es así, no la analiza y

pasa directamente a ejecutar la que mantinene en memoria. De esta manera se premia la

uniformidad en la programación de las aplicaciones. La igualdad se entiende que es

lexicografica, espacios en blanco y variables incluidas. El contenido de la zona de SQL

compartido es:

Plan de ejecución de la sentencia SQL.

Texto de la sentencia.

Lista de objetos referenciados.

Los pasos de procesamiento de cada petición de análisis de una sentencia SQL

son:

Comprobar si la sentencia se encuentra en el área compartida.

Comprobar si los objetos referenciados son los mismos.

Comprobar si el usuario tiene acceso a los objetos referenciados.

Si no, la sentencia es nueva, se analiza y los datos de análisis se almacenan en la zona

de SQL compartida.

También se almacena en la zona de SQL compartido el caché del diccionario. La

información sobre los objetos de la BD se encuentra almacenada en las tablas del

diccionario. Cuando esta información se necesita, se leen las tablas del diccionario y su

información se guarda en el caché del diccionario de la SGA.

Este caché también se administra mediante el algoritmo LRU. El tamaño del caché está

gestionado internamente por el servidor, pero es parte del shared pool, cuyo manaño

viene determinado por el parámetro SHARED_POOL_SIZE.

Área Global de Programa

El Program Global Area es un área de memoria utilizada por un proceso Oracle. Esta

zona de memoria no se puede compartir.

Page 49: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 49 

Estructuras de Proceso

El servidor se vale de una serie de procesos que son el enlace entre las estructuras

físicas y de memoria. A continuación se describen cada proceso y el papel que juega en

la gestión de laBD. Todo esto se puede ver en la siguiente figura.

System Monitor, SMON

El SMON es el supervisor del sistema y se encarga de todas las recuperaciones que sean

necesarias durante el arranque. Esto puede ser necesario si la BD se paró

inesperadamente por fallo físico, lógico u otras causas. Este proceso realiza la

recuperación de la instancia de BD a partir de los ficheros redo log. Además límpia los

segmentos temporales no utilizados y compacta los huecos libres contiguos en los

ficheros de datos. Este proceso se despierta regularmente para comprobar si debe

intervenir.

Page 50: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 50 

Process Monitor, PMON

Este proceso restaura las transacciones no validadas de los procesos de usuario que

abortan, liberando los bloqueos y los recursos de la SGA. Asume la identidad del

usuario que ha fallado, liberando todos los recursos de la BD que estuviera utilizando, y

anula la transacción cancelada. Este proceso se despierta regularmente para comprobar

si su intervención es necesaria.

Database Writer, DBWR

El proceso DBWR es el responsable de gestionar el contenido de los buffers de datos y

del caché del diccionario. Él lee los bloques de los ficheros de datos y los almacena en

la SGA. Luego escribe en los ficheros de datos los bloques cuyo contenido ha variado.

La escritura de los bloques a disco es diferida buscando mejorar la eficiencia de la E/S.

Es el único proceso que puede escribir en la BD. Esto asegura la integridad. Se encarga

de escribir los bloques de datos modificados por las transacciones, tomando la

información del buffer de la BD cuando se valida una transacción. Cada validación no

se lleva a la BD física de manera inmediata sino que los bloques de la BD modificados

se vuelcan a los ficheros de datos periodicamente o cuando sucede algún checkpoint o

punto de sincronizaión: grabación diferida:

Los bloques del buffer de la BD (bloques del segmento de rollback y bloques de

datos) menos recientemente utilizados son volcados en el disco continuamente

para dejar sitio a los nuevos bloques.

El bloque del segmento de rollback se escribe SIEMPRE antes que el

correspondiente bloque de datos.

Múltiples transacciones pueden solapar los cambios en un sólo bloque antes de

escribirlo en el disco.

Mientras, para que se mantenga la integridad y coherencia de la BD, todas las

operaciones se guardan en los ficheros de redo log. El proceso de escritura es asíncrono

y puede realizar grabaciones multibloque para aumentar la velocidad.

Log Writer, LGWR

El proceso LGWR es el encargado de escribir los registros redo log en los ficheros redo

log. Los registros redo log siempre contienen el estado más reciente de la BD, ya que

Page 51: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 51 

puede que el DBWR deba esperar para escribir los bloques modificados desde el buffer

de datos a los ficheros de datos.

Conviene tener en cuenta que el LGWR es el único proceso que escribe en los ficheros

de redo log y el único que lee directamente los buffers de redo log durante el

funcionamiento normal de la BD.

Coloca la información de los redo log buffers en los ficheros de redo log. Los redo log

buffers almacenan una copia de las transacciones que se llevan a cabo en la BD. Esto se

produce:

A cada validación de transacción, y antes de que se comunique al proceso que todo ha

ido bien,

Cuando se llena el grupo de buffers de redo log

Cuando el DBWR escribe buffers de datos modificados en disco.

Así, aunque los ficheros de DB no se actualicen en ese instante con los buffers de BD,

la operación queda guardada y se puede reproducir. Oracle no tiene que consumir sus

recursos escribiendo el resultado de las modificaciones de los datos en los archivos de

datos de manera inmediata. Esto se hace porque los registros de redo log casi siempre

tendrán un tamaño menor que los bloques afectados por las modificaciones de una

transacción, y por lo tanto el tiempo que emplea en guardarlos es menor que el que

emplearía en almacenar los bloques sucios resultado de una transacción; que ya serán

trasladados a los ficheros por el DBWR. El LGWR es un proceso único, para asegurar

la integridad. Es asíncrono. Además permite las grabaciones multibloque.

Checkpoint, CKPT

Este proceso escribe en los ficheros de control los checkpoints. Estos puntos de

sincronización son referencias al estado coherente de todos los ficheros de la BD en un

instante determinado, en un punto de sincronización. Esto significa que los bloques

sucios de la BD se vuelcan a los ficheros de BD, asegurándose de que todos los bloques

de datos modificados desde el último checkpoint se escriben realmente en los ficheros

de datos y no sólo en los ficheros redo log; y que los ficheros de redo log también

almacenan los registros de redo log hasta este instante. La secuencia de puntos de

control se almacena en los ficheros de datos, redo log y control. Los checkpoints se

producen cuando:

Un espacio de tabla se pone inactivo, offline,

Page 52: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 52 

Se llena el fichero de redo log activo,

Se para la BD,

El número de bloques escritos en el redo log desde el último checkpoint alcanza el

límite definido en el parámetro LOG_CHECKPOINT_INTERVAL,

Cuando transcurra el número de segundos indicado por el parámetro

LOG_CHECKPOINT_TIMEOUT desde el último checkpoint.

Está activo si el parámetro CHECKPOINT_PROCESS tiene un valor verdadero.

Archiver, ARCH

El proceso archivador tiene que ver con los ficheros redo log. Por defecto, estos ficheros

se reutilizan de manera cíclica de modo que se van perdiendo los registros redo log que

tienen una cierta antiguedad. Cuando la BD se ejecuta en modo ARCHIVELOG, antes

de reutilizar un fichero redo log realiza una copia del mismo. De esta manera se

mantiene una copia de todos los registros redo log por si fueran necesarios para una

recuperación. Este es el trabajo del proceso archivador.

Recoverer, RECO

El proceso de recuperación está asociado al servidor distribuido. En un servidor

distribuido los datos se encuentran repartidos en varias localizaciones físicas, y estas se

han de mantener sincronizadas. Cuando una transacción distribuida se lleva a cabo

puede que problemas en la red de comunicación haga que una de las localizaciones no

aplique las modificaciones debidas. Esta transacción dudosa debe ser resuelta de algún

modo, y esa es la tarea del proceso recuperador. Está activo si el parámetro

DISTRIBUTED_TRANSACTIONS tiene un valor distinto de 0.

Lock, LCK

El proceso de bloqueo está asociado al servidor en paralelo.

ESTRUCTURAS EXTERNAS

Por estructuras externas se entienden los ficheros que utiliza el servidor de BD, de los

cuales ya se han ido contanto algunos aspectos, y otros se han ido intuyendo. Estos

ficheros guardan información tanto de los datos almacenados en la BD como la

necesaria para gobernar la propia BD.

Page 53: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 53 

FICHEROS DE LA BD

En estos ficheros reside la información de la BD. Solo son modificados por el DBWR.

A ellos se vuelcan los bloques sucios de la SGA cuando se hace una validación o

cuando sucede un checkpoint. Las validaciones de las transacciones no producen un

volcado inmediato, sino lo que se conoce por un commit diferido. Toda actualización se

guarda en los ficheros de redo log, y se lleva a la BD física cuando tenemos una buena

cantidad de bloques que justifiquen una operación de E/S. Almacenan los segmentos

(datos, índices, rollback) de la BD. Están divididos en bloques (Bloque Oracle = c *

Bloque SO), cada uno de los cuales se corresponde con un buffer del buffer cache de la

SGA. En el bloque de cabecera no se guardan datos de usuario, sino la marca de tiempo

del último checkpoint realizado sobre el fichero.

Ficheros redo log

En ellos se graba toda operación que se efectue en la BD y sirven de salvaguarda de la

misma. Tiene que haber por lo menos 2, uno de ellos debe estar activo, online, y se

escribe en ellos de forma cíclica. Existe la posibilidad de almacenar los distintos

ficheros de redo log en el tiempo mediante el modo ARCHIVER. Así, se puede guardar

toda la evolución de la BD desde un punto dado del tiempo.

Una opción es la utilización de archivos redo log multiplexados:

Permite al LGWR escribir simultaneamente la misma información en múltiples archivos

redo log.

Se utiliza para protegerse contra fallos en el disco.

Da una alta disponibilidad a los archivos redo log activos u online.

Esto se hace definiendo el número de grupos y de miembros de archivos redo log que

van a funcionar en paralelo: grupos: funcionan como ficheros redo log normales, uno de

ellos está activo y el resto espera su turno.

Su nombre lleva incorporado una numeración.

Deben contener todo el mismo número de miembros.

Miembros: cada escritura de un registro redo log se lleva a cabo en todos los miembros

del grupo activo en ese momento. Los miembros deben:

Tener el mismo tamaño y el mismo número de secuencia.

Page 54: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 54 

Deben tener nombres similares y estar en diferentes discos para proteger contra fallos de

una manera efectiva.

Cuando se produce algún fallo en los ficheros de redo log o en el proceso LGWR:

Si la escritura en un fichero redo log falla pero el LGWR puede escribir al menos en

uno de los miembros del grupo, lo hace , ignorando el fichero inaccesible y registrando

un fallo en un fichero de traza o alerta.

Si el siguiente grupo no ha sido archivado (modo ARCHIVELOG) antes del cambio de

grupo que lo pone activo, ORACLE espera hasta que se produzca el archivado.

Si fallan todos los miembros de un grupo mientras el LGWR trata de escribir, la

instancia se para y necesita recupeción al arrancar.

Se pueden visualizar los nombres y estado de los ficheros de redo log:

SVRMGR> select group#, status, substr(member,1,60) from v$logfile;

También se pueden visualizar estadísticas de los ficheros redo log:

SVRMGR> select group#, sequence#, bytes, members, archived,

2 status, first_change#, first_time from v$logfile;

Ficheros de control

Mantienen la información física de todos los ficheros que forman la BD, camino

incluido; así como el estado actual de la BD. Son utilizados para mantener la

consistencia interna y guiar las operaciones de recuperación. Son imprescindibles para

que la BD se pueda arrancar. Contienen:

Información de arranque y parada de la BD.

Nombres de los archivos de la BD y redo log.

Información sobre los checkpoints.

Fecha de creación y nombre de la BD.

Estado online y offline de los archivos.

Debe haber múltiples copias en distintos discos, mínimo dos, para progerlos de los

fallos de disco. La lista de los ficheros de control se encuentra en el parámetro

CONTROL_FILES, que debe modificarse con la BD parada.

Page 55: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 55 

Se puede componer una sentencia SQL que nos muestre todos los ficheros asociados a

una BD. Esta es:

SQL> select 'control' tipo, substr(name,1,70) nombre from v$controlfile

2 unions all

3 select 'datos' tipo, substr(name,1,70) nombre from v$datafile

4 unions all

5 select 'redo log' tipo, substr(name,1,70) nombre from v$logfile

6 /

Hasta aquí los tipos de ficheros que se suelen considerar fundamentales en la

arquitectura del SGBD Oracle. Pero existen otros ficheros, que aunque no forman parte

de la arquitectura Oracle resultan importantes en el uso del SGBD.

El Fichero INIT.ORA

Como parte de la distribución software, Oracle provee de un fichero de parámetros de

inicialización llamado init.ora. Este fichero contiene los parámetros del sistema Oracle y

debe ser utilizado por el DBA para configurar el SGDB y adecuarlo a una determinada

explotación. Oracle lee este fichero durante el proceso de arranque para determinar el

tamaño de la SGA y encontrar los ficheros de control, entre otros menesteres.

Como el fichero init.ora es fundamental para el arranque de la BD, debería ser copiado

frecuentemente para protegerlo de posibles prédidas.

Ficheros de Traza

Oracle crea ficheros de texto llamados de traza para ayudar en la diagnosis de

problemas y en el ajuste del SGBD. Cada proceso del servidor escribe en un fichero de

traza asociado cuando es necesario. Los procesos de usuarios también pueden tener

asociados ficheros de traza. La situación de estos ficheros de traza del sistema se

especifica por el parámetro BACKGROUND_DUMP_DEST, y los de usuario por

USER_DUMP_DEST. Oracle crea ficheros de traza automáticamente cuando ocurre

algún error.

Un parámetro muy frecuentemente utilizado por los desarrolladores Oracle es el

SQL_TRACE, que cuando está puesto a TRUE produce que toda sentencia SQL

Page 56: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 56 

ejecutada genere información en los ficheros de traza. Este parámetro se puede variar

con el siguiente comando:

SQL> alter session set SQL_TRACE=TRUE;

Session Altered.

El directorio donde se depositan los ficheros de traza debe de examinarse con

regularidad para controlar el tamaño de los fichero alli depositados.

Ciclo de Ejecución

Para ilustrar el funcionamiento del servidor Oracle vamos a ver el ciclo de ejecución de

una sentencia de lectura y otra de actualización.

Ciclo de Lectura

Las sentencias de lectura siguen el siguiente ciclo:

El proceso cliente pasa la sentencia SQL (SELECT) al proceso servidor por

medio de la SGA.

Los procesos del servidor buscan en la zona de SQL compartido una versión

ejecutable de la sentencia. Si la encuentran no tienen que procesarla.

Se procesa la sentencia SQL y su versión ejecutable se coloca en la zona de SQL

compartido.

El proceso del servidor intenta leer los bloques de datos de la SGA. Si no están,

se han de leer del fichero de datos. Si los bloques están en la SGA pero han sido

modificados por otro usuario y esa modificación no ha sido validada aún, el

proceso de servidor debe reconstruir la imagen de la fila a partir de los

segmentos de rollback, para conseguir consistencia en lectura.

El proceso servidor pasa los datos solicitados al proceso cliente.

Ciclo de Actualización

Las sentencias de actualización siguen el siguiente ciclo:

1. El proceso cliente pasa la sentencia SQL (UPDATE) al proceso servidor por

medio de la SGA.

2. Los procesos del servidor buscan en la zona de SQL compartido una versión

ejecutable de la sentencia. Si la encuentran no tienen que procesarla.

Page 57: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 57 

3. Se procesa la sentencia SQL y su versión ejecutable se coloca en la zona de SQL

compartido.

4. El proceso del servidor intenta leer los bloques de datos de la SGA. Si no están,

se han de leer del fichero de datos.

5. Se registra el valor antiguo de los datos en un segmento de rollback y se crea un

registro redo log.

6. Se crea una copia de la transacción en un registro redo log.

7. Se ejecuta la sentencia SQL modificando los datos, y se crea un registro redo log

que así lo refleja.

8. El proceso usuario valida la transacción (COMMIT), registrandose en un

registro redo log.

9. El LGWR escribe los buffers del redo log en el disco.

10. El servidor indica al cliente que la operación ha sido completada de manera

satisfactoria.

11. Se registra la terminación de la transacción en un registro redo log.

12. Se libera la información del rollback, pues ya no va a necesitarse.

13. Si a partir del paso 6 el usuario cancela la transacción (ROLLBACK), se puede

utilizar la información de rollback para restablecer el valor original.

14. Si sucede algo que impida que la transacción validada por el usuario pueda

llevarse a cabo, se puede utilizar la información contenida en los registros redo

log para rehacer la transacción (a partir del paso 6).

15. Como ocurre con todas las transacciones, en algún momento el DBWR escribe

en el archivo de datos la copia de los bloques de datos modificados que se

encuentran en el buffer cache.

3 Configuración

3.1 El Código Oracle

Cuando el software Oracle se instala en un sistema, se crean subdirectorios y ficheros,

dependientes todos ellos del S.O. Por ejemplo, en el S.O. Unix, todo los subdirectorios

Oracle se encuentran colgando del directorio principal ORACLE_HOME. Todos estos

subdirectorios contienen ficheros ejecutables y scripts que son cruciales para el

Page 58: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 58 

funcionamiento y la administración del SGBD, y es lo que se conoce por el código

Oracle. Entre ellos, una herramienta nos va a ser fundamental en las tareas de

adminstración y puesta en marcha de la BD: server manager, svrmgr. Con ella son

convertiremos en DBA, y para ejecutarla deberemos ser sus propietarios. La sentencia

es la siguiente:

SVRMGR> connect internal

Connected.

Todas las operaciones de administración deben comenzar por conectarse a la BD.

Arranque y Parada de la BD

Durante el arranque y parada de la BD se sucenden un conjunto de eventos que llevan a

la BD por diferentes estados.

Para que los usuarios puedan acceder a la BD el DBA necesita abrir la BD. El siguiente

es un ejemplo de apertura de una BD llamada test.

SVRMGR> startup open test

ORACLE instance started.

Total System Global Area 4512688 bytes.

Fixed Size 39732 bytes.

Variable Size 4055164 bytes.

Database Buffers 409600 bytes.

Redo Bufers 8192 bytes.

Database mounted.

Database opened.

cuando se ejecuta el comando startup open la BD pasa por tres estados (nomount, mount

y open) antes de estar disponible. El DBA puede arrancar la BD hasta uno de los

estados con el comando startup: startup nomount, startup mount. A continuación vamos

a describir cada uno de los estados por los que pasa la BD en el proceso de arranque.

nomount

SVRMGR> startup open test

Page 59: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 59 

ORACLE instance started.

Total System Global Area 4512688 bytes.

Fixed Size 39732 bytes.

Variable Size 4055164 bytes.

Database Buffers 409600 bytes.

Redo Bufers 8192 bytes.

Oracle lee el fichero init.ora, localiza los ficheros de control, crea e inicializa la SGA, y

finalmente arranca todos los procesos Oracle. En este estado la instancia de BD está

arrancada. Se deberá llevar la BD al estado nomount cuando se esté creando la BD o

cuando se está restaurando un fichero de control después de haberlo perdido.

mount

SVRMGR> alter database mount;

Statement processed.

Oracle abre los ficheros de control para localizar los ficheros de datos y los redo log,

pero no se realizan ninguna comprobación en ellos en este momento. La instancia monta

la BD y la bloquea, verificando que ninguna otra instancia ha montado la misma BD.

Hay varias razones para querer tener la BD en el estado mount. En general, todas las

sentencias SQL del tipo alter database se deben ejecutar en esta etapa. Algunas de las

operaciones a realizar cuando la BD está montada son: efectuar recuperaciones, poner

online/offline un fichero de datos, recolocar los ficheros de datos y redo log, crear un

nuevo grupo o miembro redo log, o borrar un grupo o miembro redo log existente.

Open

SVRMGR> alter database open;

Statement processed.

Durante esta etapa, la instancia abre la BD, bloquea los ficheros de datos, y abre todos

los ficheros redo log. Si la instancia abre la BD después de una terminación anormal, o

después de una caida, se ejecutará automáticamente el proceso de recuperación

utilizando los ficheros redo log. Al final de esta etapa la BD está dispuesta para su uso

normal.

Page 60: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 60 

Para parar la BD el comando base es shutdown como se puede ver en el siguiente

ejemplo:

SVRMGR> shutdown

Database closed.

Database dismounted.

ORACLE instance shut down.

Pero este comando se nos presenta con tres opciones: normal, immediate y abort.

shutdown normal

Se impide el acceso a la BD, espera a que todos los usuarios completen todas sus

peticiones y se desconecten del servidor. Purga todos los buffers de datos y cachés de

redo log, actualizando los ficheros de datos y de redo log, se eliminan los bloqueos de

ficheros, se completan las transacciones en marcha, se actualizan las cabeceras de

ficheros, elimina los threads, libera los bloqueos de la BD por parte de la instancia, y

sincroniza los ficheros de control y de datos. En resumen, la opción normal cierran la

BD, desmonta la BD y para la instancia con cuidado y es la opción recomendada para

parar la BD.

shutdown immediate

En ciertas ocasiones puede ser necesario parar la BD de modo inmediato. Si es así, las

sentencias en proceso son terminadas inmediatamente, cualquier transacción no

confirmada (uncommitted) es vuelta atrás (rolled back) y la BD es parada. La única

desventaja de utilizar esta opción es que Oracle no espera a que los usuarios se

desconecten. Sin embargo, la BD será consistenta y no se necesitará recuperación en el

siguiente arranque.

shutdown abort

En situaciones de emergencia, y cuando todo lo demás falla, se debe realizar una parada

de este tipo. Por ejemplo, cuando un proceso de la instancia muere y la BD no puede

pararse de modo normal o inmediato. Cuando se utiliza la opción abort las sentencias

SQL son terminadas bruscamente, y las transacciones no confirmadas no son vueltas

Page 61: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 61 

atrás. Parar la BD con la opción abort requiere recuperación en la siguiente vez que

arranque la BD y esta opción debe ser utilizada sólo cuando no quede más remedio.

Almacenamiento de Datos

Los datos se almacenan en estacios de tablas, y un espacio de tabla es la entidad lógica

que se corresponde con uno o más ficheros físicos. La principal razón de esta

organización es el aumento de la flexibilidad a la hora de realizar operaciones con la

BD. En esta sección vamos a dar un repaso a las tareas de administración relacionadas

con los espacios de tablas y con los ficheros.

Espacios de Tablas y Ficheros

Los espacios de tablas se utilizan para realizar tareas de gestión de espacio, controlar la

disponibilidad de los datos y ejecutar copias de seguridad y recuperaciones parciales.

Gestión de Espacio

El primer espacio de tablas es el SYSTEM. Este espacio de tablas debe estar disponible

siempre durante el funcionamiento normal de la BD porque contiene el diccionario de

datos. Después de la creación de la BD, se recomienda la creación de otros espacios de

tablas para que los datos de los usuarios puedan ser separados de los del diccionario de

datos. Incluso, si varias apliaciones se van a ejecutar sobre la misma BD es

recomendable que sus datos estén separados. Para crear un espacio de tablas se puede

utilizar el comando create tablespace:

SVRMGR> create tablespace nombre_tablespace

2> datafile 'nombre_fichero' size 50M online;

En el ejemplo anterior se ha creado un espacio de tablas de 50 Mb. de tamaño. Cada

espacio de tabla tiene un conjunto de parámetros de almacenamiento que controla su

crecimiento:

• initial: tamaño de la extensión inicial (10k).

• next: tamaño de la siguiente extensión a asignar (10k).

• minextents: número de extensiones asignadas en el momento de la creación del

espacio de tablas (1).

Page 62: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 62 

• maxextents: número máximo de extensiones.

• pctincrease: Porcentaje en el que crecerá la siguiente extensión antes de que se

asigne, en relación con la última extensión utilizada.

• optimal: Tamaño óptimo declarado para este espacio de tablas.

• pctused: porcentaje de utilización del bloque por debajo del cual Oracle

considera que un bloque puede ser utilizado para insertar filas nuevas en él.

• Si el espacio de tablas necesita más espacio después de su creación se puede

alterar para añadir uno o más ficheros. Para ello se puede utilizar el comando

alter tablespace:

SVRMGR> alter tablespace nombre_tablespace

2> add datafile 'nombre_fichero' size 30M;

Si se necesitara variar la localización de los ficheros asociados a un espacio de tablas se

puede hacer con los comandos alter tablespace (el espacio de tables debe estar offline) o

alter database (la BD debe estar montada pero no abierta). Antes de ejecutar los

anteriores comandos los ficheros asociados al espacio de tablas deben de haber sido

movidos a su nueva localización utilizando los comandos de los SO oportunos.

Poniendo los tablespaces offline

Llevar a un espacio de tablas al estado offline significa que se impide el acceso a los

datos que almacena. El espacio de tablas SYSTEM nunca puede estar offline. Las

razones para poner un espacio de tablas offline pueden ser varias: un error de escritura

en los ficheros que lo soportan, el mover los ficheros de sitio, etc. Depués de realizar

estas operaciones hay que poner otra vez disponible el espacio de tablas, esto es on line

Los espacios de tablas se pueden poner offline de tres modos: normal, temporary e

immediate. Si no existe ningún error lo recomendable es poner el espacio de tablas

offline usando el modo normal. Así, se colocará un checkpoint en el espacio de tablas

antes de ponerlo offline.

SVRMGR> alter tablespace nombre_tablespace offline normal;

Si alguno de los ficheros está corrupto, la opción normal fallará y se necesitará el modo

temporary. La opción immediate se utilizará sólo cuando la BD está en modo

ARCHIVELOG, ya que no se produce checkpoint alguno.

Page 63: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 63 

Poniendo los ficheros offline

No es normal poner los ficheros offline/online. Si un determinado fichero de datos se

corrompe, se tendrá que pone offline, repararlo y ponerlo online de nuevo. Esta

operación puede suponer sustituirlo por su copia de seguridad, lo que implicará ejecutar

el comando recover datafile antes de poner el fichero online.

Segmentos, Extensiones y Bloques

Los datos en la BD son almacenados físicamente en bloques Oracle: la mínima unidad

de espacio físico, y es un múltiplo del bloque del SO (2 Kb usualmente). El tamaño del

bloque Oracle se fija por el parámetro DB_BLOCK_SIZE del fichero init.ora. Un

tamaño grande de bloque mejora la eficiencia del cache de E/S, pero el tamaño de la

SGA aumentará para contener los mismos DB_BLOCK_BUFFERS, lo que significa un

problema de memoria.

Una serie de bloques contiguos es una extensión, que es una unidad lógica de

almacenamiento. Una serie de extensiones es un segmento. Cuando un objeto es creado,

se reserva una extensión en su segmento. Cuando el objeto crezca, necesitará más

espacio y se reservarán más extensiones.

Cada segmento tiene un conjunto de parámetros de almacenamiento que controla su

crecimiento:

initial: tamaño de la extensión inicial (10k).

next: tamaño de la siguiente extensión a asignar (10k).

minextents: número de extensiones asignadas en el momento de la creación del

segmento (1).

maxextents: número máximo de extensiones (99).

pctincrease: Porcentaje en el que crecerá la siguiente extensión antes de que se

asigne, en relación con la última extensión utilizada (50).

pctfree: porcentaje de espacio libre para actualizaciones de filas que se reserva

dentro de cada bloque asignado al segmento (10).

pctused: porcentaje de utilización del bloque por debajo del cual Oracle

considera que un bloque puede ser utilizado para insertar filas nuevas en él.

Tablespace: nombre del espacio de tablas donde se creará el segmento.

Page 64: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 64 

Cuando se diseña una BD se ha de tener mucho cuidado a la hora de dimensionar la BD

y prever el crecimiento de las tablas. A continuación se hacen algunas consideraciones

sobre la gestión del espacio para los diferentes segmentos.

Segmentos de Datos

El espacio del diccionario de datos se suele mantener más o menos constante, aunque es

crítico que tenga suficiente espacio para crecer en el espacio de tablas SYSTEM. Así,

hay que tener cuidado de colocar las tablas de usuario, los índices, segmentos

temporales y los segmentos de rollback en otros espacios de tablas. Además, es

recomendable que el espacio de tablas SYSTEM esté al 50% o 75% de su espacio

disponible. Finalmente, asegurarse que los usuarios no tienen privilegios de escritura en

el espacio de tablas SYSTEM.

Las tablas crecen proporcionalmente con el número de filas, ya que se puede suponer

que la longitud de las filas es constante.

Segmentos de Índice

Los índices crecen en tamaño en mayor proporción que las tablas asociadas si los datos

en la tabla son modificados frecuentemente. La gestión del espacio es mejor si se

mantienen los índices de tablas grandes en espacios de tablas separados.

Segmentos de Rollback

Los segmentos de rollback almacenan la imagen anterior a una modificación de un

bloque. La información en el segmento de rollback se utiliza para asegurar la

consistencia en lectura, el rollback (el valor en el segmento de rollback se copia en el

bloque de datos) y la recuperación.

Es importante comprender cual es el contenido de un segmento de rollback. No

almacenan el bloque de datos modificado entero, sólo la imagen previa de la fila o filas

modificadas. La información del segmento de roolback consiste en varias entradas

llamadas undo. Por ejemplo, si se inserta una fila en una tabla, el undo necesitará sólo el

rowid de la fila insertada, ya que para volver atrás la insercion sólo hay que realizar un

delete. En las operación de actualización, se almacenará el valor antiguo de las

Page 65: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 65 

columnas modificadas. El segmento de rollback asegura que la información undo se

guardan durante la vida de la transacción.

Un segmento de rollback como cualquier otro segmento consiste en una serie de

extensiones. Sin embargo, la mayor diferencia entre un segmento de datos y otro

rollback es que en este último las extensiones se utilizan de manera circular. Así, habrá

que tener cuidado a la hora de fijar el tamaño del segmento de rollback para que la

cabeza no pille a la cola.

Segmentos Temporales

Los segmentos temporales se crean cuando se efectuan las siguientes

operaciones:

Create Index

Select con distinct, order by, union, intersect y minus.

uniones no indexadas.

Ciertas subconsultas correlacionadas.

Si las tablas a ordenar son pequeñas la ordenación se realiza en memoria principal, pero

si la tabla es grande se realiza en disco. El parámetro SORT_AREA_SIZE determina el

lugar donde se hace la ordenación. Incrementándole se reduce la creación de segmentos

temporales.

Configuración de la BD

Mientras se diseña la BD hay que considerar la posible recuperación de una caida, y las

prestaciones de la BD, relacionando todo esto con las necesidades de la implantación y

los medios disponibles. La configuración de la BD está relacionada con los ficheros de

control, los ficheros redo log activos y los archivados.

Gestionando los Ficheros de Control

Los ficheros de control contienen el esquema de la BD. Es uno de los más importantes

ficheros e imprescindible para el uso normal de la BD. Así que daremos alguna pista

para su gestión.

El parámetro CONTROL_FILES del fichero init.ora contiene la lista de todos los

ficheros de control. Cuando se arranca la BS, Oracle lee el fichero init.ora para

determinar cuántos ficheros de control se usan en la BD y dónde están. Durante la fase

de montaje, se abren los ficheros de control para leer el esquema de la BD. Aunque

Page 66: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 66 

Oracle escribe en todos los ficheros de control, sólo lee el primero listado en el

parámetro CONTROL_FILES.

Para protegerlos contra fallos de almacenamiento, se sugiere que al menos existan dos

ficheros de control, cada uno en un disco diferente, aunque es buena idea mantener más

copias en diferentes discos. Esto es una política de espejado que protege frente a fallos

en disco. Si un disco falla y se pierden todos los ficheros en él, se puede seguir

utilizando los ficheros de control de otros discos. Esto supone una pequeña sobrecarga

al sistema, ya que cada vez que se porduce un checkpoint o cambia el esquema de la

BD, todos los ficheros de control son actualizados.

Cuando se produce un fallo en algún disco y algún fichero de control se pierde hay que

parar la BD con la opción abort, copiar el fichero de control que queda en otro disco,

editar el fichero init.ora para reflejar este cambio, y volver a levantar la BD.

Si un fallo ha producido la pérdida de todas las copias de los ficheros de control habrá

que recrearlos con el comando create controlfile. Si algunos de los parámetros

MAXLOGFILES, MAXLOGMEMBERS, MAXLOGHISTORY, MAXDATAFILES y

MAXINSTANCES varía habrá que utilizar también el comando CREATE

CONTROLFILE.

Gestionando los Ficheros Redo Log Activos

Oracle proporciona la posibilidad de espejar los ficheros redo log activos. Mecanismo

conocido como ficheros redo log multiplexados. Oracle necesita al menos dos grupos de

fricheros redo log, cada uno con un miembro como mínimo. Oracle efectua escrituras

en paralelo a cada miembro, pero si están en el mismo disco, realmente la escritura se

serializa.

Otro aspecto a tener en cuenta es el tamaño de los ficheros redo log. Si son muy

pequeños, el LGWR deberá cambiar de ficheros demasiado frecuentemente, lo que

reduce su rendimiento. Por otro lado, si los ficheros redo log son demasiado grandes, se

necesitará mucho tiempo en las recuperaciones, ya que se tendrán que recuperar muchas

transacciones.

Otro aspecto muy importante es la elección del número correcto de grupos, ya que

disponer de demasiados pocos grupos puede acarrear problemas cuando estámos en

modos ARCHIVELOG y tenemos una tasa de transacciones muy alta. Esto puede

suponer que un grupo que todavía está archivando por el proceso ARCH se convierta en

Page 67: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 67 

el grupo en el que el LGWR necesite escribir, lo que produciría que la BD se parara, ya

que el LGWR tienen que esperar a que el grupo esté disponible, una vez que su

contenido ha sido archivado. Para la mayoría de las implantaciones, tener entre 2 y 10

grupos puede ser suficiente. El número de grupos no puede exceder de

MAXLOGFILES, ni el número de miembros puede ser mayor que

MAXLOGMEMBERS.

TIPOS DE SENTENCIAS

Las sentencias SQL pertenecen a dos categorías principales: Lenguaje de Definición de

Datos, DDL y Lenguaje de Manipulación de Datos, DML. Estos dos lenguajes no son

lenguajes en sí mismos, sino que es una forma de clasificar las sentencias de lenguaje

SQL en función de su cometido. La diferencia principal reside en que el DDL crea

objetos en la base de datos y sus efectos se pueden ver en el diccionario de la base de

datos; mientras que el DML es el que permite consultar, insertar, modificar y eliminar la

información almacenada en los objetos de la base de datos.

Cuando se ejecutan las sentencias DDL de SQL, el SGBD confirma la transacción

actual antes y después de cada una de las sentencias DDL. En cambio, las sentencias

DML no llevan implícito el commit y se pueden deshacer. Existe pues un problema al

mezclar sentencias DML con DDL, ya que estas últimas pueden confirmar las primeras

de manera involuntaria e implicita, lo que en ocasiones puede ser un problema.

A continuación se presenta una tabla con las sentencias SQL más comunes, clasificadas

según el lenguaje al que pertenecen.

Sentencia

DDL Objetivo

Alter

procedure Recompilar un procedimiento almacenado.

Alter Table Añadir o redefinir una columna, modificar la asignación de

almacenamiento.

Analyze Recoger estadísticas de rendimiento sobre los objetos de la BD

para utilizarlas en el optimizador basado en costes.

Page 68: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 68 

Create Table Crear una tabla.

Create Index Crear un índice.

Drop Table Eliminar una tabla.

Drop Index Eliminar un índice.

Grant Conceder privilegios o papeles, roles, a un usuario o a otro rol.

Truncate Eliminar todas las filas de una tabla.

Revoke Retirar los privilegios de un usuario o rol de la base de datos.

Sentencia

DML Objetivo

Insert Añadir filas de datos a una tabla.

Delete Eliminar filas de datos de una tabla.

Update Modificar los datos de una tabla.

Select Recuperar datos de una tabla.

Commit Confirmar como permamentes las modificaciones realizadas.

Rollback Deshacer todas las modificaciones realizadas desde la última

confirmación.

SQL*Plus

La herramienta que nos proporciona ORACLE para interactuar con la base de datos se

llama SQL*Plus. Básicamente, es un intérprete SQL con algunas opciones de edición y

formateo de resultados.

Antes de ver la manera de conectarse a SQL*Plus, conviene tener claros algunos

conceptos:

Usuario/Clave

Para poder acceder a una base de datos gestionada por ORACLE debemos ser un

usuario autorizado de la misma y conocer la palabra clave, password, asociada al

usuario.

Variable de ambiente ORACLE_SID

Indica la base de datos con la que vamos a trabajar.

Page 69: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 69 

Posibilidades de Edición

SQL*Plus almacena en un buffer la última sentencia SQL introducida. El buffer

mantiene sólo una sentencia cada vez, y si se introduce una nueva sentencia se

sobreescribe sobre la anterior.

La sentencia en el buffer puede ser recuperada para ejecutarla de nuevo con los

comandos:

RUN que visualiza la sentencia en el buffer antes de ejecutarla;

/ que ejecuta la sentencia sin visualizarla.

SQL*Plus también nos permite editar la sentencia SQL alamacenada en el buffer

mediante un sencillo (y limitado) editor en línea, cuyos comandos se enumeran a

continuación:

Comando Abreviatura Descripción

APPEND texto A texto Añade texto al final de la línea.

CHANGE/fuente/destino C/fuente/destino Cambia el contenido 'fuente' por el

'destino'

CHANGE/texto C/texto Quita 'texto' de una línea.

CLEAR BUFFER CL BUFF Borra el buffer

DEL DEL Borra una línea.

INPUT I Inserta una o más líneas.

INPUT texto I texto Inserta una línea con 'texto'.

LIST L Lista las líneas del buffer

LIST n L n ó n Lista la línea n-ésima.

LIST * L * Lista la línea actual.

LIST LAST L LAST Lista la última línea.

LIST m n L m n Lista las líneas desde la m-ésima a

la n-ésima.

Al contenido del buffer también se puede acceder desde el editor del Sistema Operativo.

Así, el buffer podrá ser manipulado con las posibilidades del editor con el que estemos

Page 70: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 70 

acostumbrados a trabajar. Al salir del editor se devuelve el control al SQL*Plus. Para

conseguir trabajar con el editor del Sistema Operativo basta con colocar la variable

DEFINE_EDITOR y luego llamar al editor.

SQL> define_editor=vi

SQL> edit

Utilización de Ficheros

SQL*Plus considera dos tipos de ficheros: de spool y de comandos.

Un fichero de spool almacena los resultados de una consulta (o varias) en un fichero

con la extensión .lst (o lo manda a la impresora).

Los comandos asociados con los ficheros spool son

SPOOL fichero

Manda el resultado de las consultas al fichero.

SPOOL OUT

Manda el resultado de las consultas a la impresora.

SPOOL OFF

Cierra el fichero de spool.

EXIT

Al salir de SQL*Plus se cierran los ficheros de spool.

Los archivos de comandos almacenan comandos SQL y SQL*Plus para ser editado,

almacenado y/o ejecutado; y tienen por defecto la extensión .sql :

Para editarlo se puede utilizar el comando edit fichero.

Para ejecutarlo se utilizará el comando START fichero o @fichero

El SQL*Plus nos proporciona más posibilidades en relación con los ficheros de

comandos, la comunicación con el usuario final y la generación de informes. Pero antes

de ver este tipo de cosas, es mejor que sigamos profundizando en el conocimiento del

lenguaje SQL. Al final del curso se puede se encuentra un capítulo con algunas de las

cosillas que quedan por contar del SQL*Plus.

Page 71: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 71 

CREACIÓN

La primera fase de cualquier base de datos comienza siempre con sentencias DDL, ya

que antes de poder almacenar información debemos definir los objetos básicos donde

agrupar la información. Los objetos básicos con que trabaja SQL son las tablas. Una

tabla es un conjunto de celdas agrupadas en filas y columnas donde se almacenan

elementos de información.

Antes de llevar a cabo la creación de una tabla conviene planificar:

nombre de la tabla,

nombre de cada columna,

tipo y tamaño de los datos almacenados en cada columna,

información adicional, restricciones, etc.

Hay que tener en cuenta también ciertas restricciones en la formación de los nombres de

las tablas: longitud máxima de 30 caracteres, no puede haber nombres de tabla

duplicados, deben comenzar con un carácter alfabético, permitir caracteres

alfanuméricos y el guión bajo '_', y Oracle no distingue entre mayúsculas y minúsculas.

La sintaxis del comando que permite crear una tabla es la siguiente:

Examen de la sintaxis de la sentencia Create Table se pueden concluir que necesitamos

conocer los distintos tipos de columna y las distintas restricciones que se pueden

imponer al contenido de las columnas. Vayamos por partes.

TIPOS DE COLUMNAS

Existen varios tipos de datos en SQL. De esta manera, cada columna puede albergar una

información de naturaleza distinta. Los tipos de datos más comunes y sus características

se resumen en la siguiente tabla.

Tipo de Dato Descripción

VARCHAR2(tamaño) Almacena datos de tipo carácter alfanumérico de

longitud variable, con un tamaño máximo de 2.000.

CHAR(tamaño) Almacena datos de tipo carácter alfanumérico de

longitud fija, con un tamaño máximo de 255.

LONG Almacena datos de tipo carácter alfanumérico de

Page 72: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 72 

longitud variable con un tamaño máximo de hasta 2 Gb.

NUMBER(dig,dec) Almacena datos numéricos de dig dígitos, de los cuales

dec son decimales. El tamaño máximo es de 38 dígitos.

DATE Almacena fechas desde el 1-Ene-4712 AC hasta el 31-

Dic-4712 DC.

RAW(tamaño) Almacena datos de longitud variable, con un tamaño

máximo de 255 bytes.

LONG RAW Almacena datos de longitud variable, con un tamaño

máximo de 2 Gb.

RESTRICCIONES

Las restricciones de los datos se imponen para asegurarnos que los datos cumplen con

una serie de condiciones predefinidas para cada tabla. Estas restricciones ayudan a

conseguir la integridad de referencia: todas las referencias dentro de una BD son válidas

y todas las restricciones se han cumplido.

Las restricciones se van a definir acompañadas por un nombre, lo que permitirá

activarlas o desactivarlas según sea el caso; o también mezcladas en la definiciones de

las columnas de la tabla. A continuación vamos a describir cada una de las restricciones

mencionadas.

NOT NULL

Establece la obligatoriedad de que esta columna tenga un valor no nulo. Se debe

especificar junto a la columna a la que afecta. Los valores nulos no ocupan espacio, y

son distintos a 0 y al espacio en blanco. Hay que tener cuidado con los valores nulos en

las operaciones, ya que 1 * NULL es igual a NULL.

UNIQUE

Evita valores repetidos en una columna, admitiendo valores nulos. Oracle crea un índice

automáticamente cuando se habilita esta restricción y lo borra al deshabilitarse.

DEFAULT

Establece un valor por defecto para esa columna, si no se le asigna ninguno.

CHECK

Page 73: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 73 

Comprueba que se cumpla una condición determinada al rellenar esa columna. Esta

condición sólo debe estar construida con columnas de esta misma tabla.

PRIMARY KEY

Establece el conjunto de columnas que forman la clave primaria de esa tabla. Se

comporta como única y obligatoria sin necesidad de explicitarlo. Sólo puede existir una

clave primaria por tabla. Puede ser referenciada como clave ajena por otras tablas. Crea

un índice automáticamente cuando se habilita o se crea esta restricción. En Oracle, los

índices son construidos sobre árboles B+.

FOREIGN KEY

Establece que el contenido de esta columna será uno de los valores contenidos en una

columna de otra tabla maestra. Esta columna marcada como clave ajena puede ser

NULL. No hay límite en el número de claves ajenas. La clave ajena puede ser otra

columna de la misma tabla. Se puede forzar que cuando una fila de la tabla maestra sea

borrada, todas las filas de la tabla detalle cuya clave ajena coincida con la clave borrada

se borren también. Esto se consigue añadiendo la coletilla ON DELETE CASCADE en

la definición de la clave ajena.

Seguidamente se presenta un ejemplo en el que se crean dos tablas, una de

departamentos y otra de empleados:

REM

REM tabla departamento con un código de departamento, un nombre y una

REM localización.

REM

create table dep (

cod_dep number(3),

nombre varchar2(15) not null,

loc varchar2(10),

constraint dep_pk primary key (cod_dep),

constraint dep_loc check

(loc in ('Valladolid', 'Boecillo', 'Cigales'))

);

REM

REM tabla empleado con un código de empleado, un nombre, un oficio, un

Page 74: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 74 

REM jefe, una fecha de alta en la empresa, un salario mensual, una

REM comisión y el código del departamento donde trabaja.

REM

create table emp (

cod_emp number(3),

nombre varchar2(10) not null,

oficio varchar2(11),

jefe number(3),

fecha_alta date,

salario number(10),

comision number(10),

cod_dep number(3),

constraint emp_pk primary key (cod_emp),

constraint emp_fk foreign key (cod_dep) references dep(cod_dep)

on delete cascade,

constraint emp_ck check (salario > 0)

);

Comando Describe

Oracle nos proporciona un comando que resulta muy útil cuando queremos conocer la

estructura de una tabla, las columnas que la forman y su tipo y restricciones. Este

comando toma una mayor importancia según nos alejemos del momento de creación de

una tabla.

La sintásis es la siguiente

DESCRIBE tabla

Y un ejemplo de su utilización se puede ver al describir la definición de las dos tablas

creadas antes. Como no es una sentencia SQL no necesita el ';' al final. También se

puede abreviar como DESC.

SQL> describe dep

Name Null? Type

Page 75: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 75 

------------------------------- -------- ----

COD_DEP NOT NULL NUMBER(3)

NOMBRE NOT NULL VARCHAR2(15)

LOC VARCHAR2(10)

SQL> desc emp

Name Null? Type

------------------------------- -------- ----

COD_EMP NOT NULL NUMBER(4)

NOMBRE NOT NULL VARCHAR2(10)

OFICIO VARCHAR2(10)

JEFE NUMBER(4)

FECHA_ALTA DATE

SALARIO NUMBER(10)

COMISION NUMBER(10)

COD_DEP NUMBER(3)

Modificación

Después de crear una tabla, a veces nos encontramos con que se necesita añadir una

columna adicional o modificar la definición de una columna existente. Esta operación se

puede realizar con el comando ALTER TABLE.

Hay que tener en cuenta varios puntos:

No es posible disminuir el tamaño de un columna.

En las modificaciones, los tipos anterior y nuevo deben ser compatibles, o la

tabla debe estar vacía.

La opción ADD ... NOT NULL sólo será posible si la tabla está vacía.

La opción MODIFY ... NOT NULL sólo podrá realizarse cuando la tabla no

contenga ninguna fila con valor nulo en la columna en cuestión.

Por ejemplo la sentencia siguiente añade la fecha de nacimiento a la tabla de empleados.

SQL> alter table emp add (fecha_nac date not null);

También se puede querer modificar una tabla añadiendo o eliminando restricciones. En

este caso el comando a utilizar será

Page 76: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 76 

ALTER TABLE tabla {ADD | DROP} CONSTRAINT restricción;

INSERCIÓN, ACTUALIZACIÓN Y BORRADO

Una vez que tenemos definida la estructura de una tabla se pueden insertan los datos,

modificarlos o borrarlos de la tabla.

Esta tarea entra dentro de las operaciones que se realizan con el lenguaje DML. Este

lenguaje permite manipular los objetos de la base de datos, insertando, modificando y/o

borrando el contenido de las tablas. Hay que recordar que estas sentencias no son

'autoconfirmadas' y requieren de la sentencia COMMIT para que sus efectos perduren

en el tiempo, o de la sentencia ROLLBACK para deshacer los cambios efectuados.

A continuación vamos a estudiar tres de las sentencias DML más comunes.

Inserción

El comando que permite insertar filas en las tablas es el siguiente.

INSERT INTO tabla [({columna,}*)] VALUES ({expresión,}+);

Sólo especificaremos las columnas donde insertar y su orden cuando no insertemos

datos en todas ellas o no lo hagamos en el mismo orden en que definimos la tabla. La

asociación columna-valor es posicional. Los valores deben cumplir con los tipos de

datos definidos. Los valores de tipo caracter y fecha deben ir encerrados entre comillas

simples, ('').

A continuación se puede ver la inserción de filas en las tablas de ejemplo.

REM insertar filas en la tabla dep

insert into dep values (100,'Administracion','Valladolid');

insert into dep values (200,'I+D','Boecillo');

insert into dep values (300,'Produccion','Cigales');

REM insertar filas en la tabla emp

insert into emp values

(101,'Cano','Presidente',null,'3-FEB-96',450000,null,100);

Page 77: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 77 

insert into emp values

(102,'Roncal','Director',101,'3-FEB-96',350000,null,100);

insert into emp values

(103,'Rueda','Secretario',102,'17-MAR-96',175000,null,100);

insert into emp values

(104,'Martin','Contable',102,'17-MAR-96',235000,null,100);

insert into emp values

(105,'Sanz','Comercial',101,'17-MAR-96',150000,10,100);

insert into emp values

(106,'Lopez','Comercial',101,'21-MAR-96',150000,15,100);

insert into emp values

(201,'Perez','Director',101,'4-JUN-96',350000,null,200);

insert into emp values

(202,'Sastre','Analista',201,'8-JUN-96',300000,null,200);

insert into emp values

(203,'Garcia','Programador',202,'8-JUN-96',225000,null,200);

insert into emp values

(204,'Mateo','Programador',202,'8-JUN-96',200000,null,200);

insert into emp values

(301,'Yuste','Director',101,'3-OCT-96',350000,null,300);

insert into emp values

(302,'Recio','Analista',301,'4-FEB-97',300000,null,300);

insert into emp values

(303,'Garcia','Programador',302,'4-FEB-97',210000,null,300);

insert into emp values

(304,'Santana','Programador',302,'4-FEB-97',200000,null,300);

Actualización

Otra de las operaciones más comunes es la modificación de la información almacenada

en las tablas. Para ello se utiliza el comando UPDATE cuya sintaxis se muestra a

continuación.

UPDATE tabla SET {columna = expresión,}+ [WHERE condición];

Page 78: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 78 

Se especificará en la cláusula SET las columnas que se actualizarán y con qué valores.

La cláusula WHERE indica las filas con las que se va a trabajar. Si se omite la

actualización afectará a todas las filas de la tabla.

BORRADO

Con insertar y modificar, la otra operación que completa el trio es la de borrado de filas.

La sintaxis es la que sigue:

DELETE FROM tabla [WHERE condición];

Borrará todas las filas que cumplan la condición especificada en la cláusula WHERE. Si

esta cláusula no se fija, se borrarán todas las filas de la tabla. Aquí cabe decir que

aunque con DELETE borremos todas las filas de una tabla, no borramos la definición de

la tabla del diccionario y podemos insertar datos posteriormente en la tabla. Esta es una

diferencia con la sentencia DROP TABLE, que produce la eliminación tanto del

contenido de la tabla como de la definición de la misma.

SELECCIÓN

La recuperación de los datos en el lenguaje SQL se realiza mediante la sentencia

SELECT, seleccionar. Esta sentencia permite indicar al SGBD la información que se

quiere recuperar. Esta es la sentencia SQL, con diferencia, más habitual. La sentencia

SELECT consta de cuatro partes básicas:

1. La cláusula SELECT seguida de la descripción de lo que se desea ver, los

nombres de las columnas a seleccionar. Esta parte es obligatoria.

2. La cláusula FROM seguida de la especificación de las tablas de las que se han

de obtener los datos. Esta parte es obligatoria.

3. La cláusula WHERE seguida por un criterio de selección, una condición. Esta

parte es opcional.

4. La cláusula ORDER BY seguida por el criterio de ordenación. Esta parte es

opcional.

5. Una primera aproximación a la sintaxis de la sentencia SELECT puede

mostrarnos la siguiente expresión:

Page 79: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 79 

Como una primera utilización de la sentencia SELECT podemos utilizarla para ver

todas las tablas que tenemos en la base de datos.

SQL> select table_name from user_tables;

TABLE_NAME

------------------------------

DEP

EMP

Un breve análisis de la sentencia anterior nos permite observar que hemos consultado

sobre la columna llamada table_name almacenada en la tabla user_tables, que es la tabla

que guarda la información sobre todas las tablas de cada usuario.

Selección de Columnas

Las columnas a seleccionar se enumeran sin más en la cláusula SELECT. Si se desea

seleccionar todas las columnas de una tabla se puede hacer enumerando a todas las

columnas o colocando un asterisco, *, en su lugar.

Cuando se consulta una base de datos, los nombres de las columnas se usan como

cabeceras de presentación. Si éste resulta demasiado largo, corto o críptico, puede

cambiarse con la misma sentencia SQL de consulta, creando un alias de columna.

SQL> select nombre "Departamento", loc "Está en" from dep;

Departamento Esta en

--------------- ----------

Administracion Valladolid

I+D Boecillo

Produccion Cigales

Cláusula FROM

La cláusula FROM define las tablas de las que se van a seleccionar las columnas.

Page 80: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 80 

Se puede añadir al nombre de las tablas el usuario propietario de las mismas de la forma

usuario.tabla. De esta manera podemos distinguir entre las tablas de un usuario y otro.

Oracle siempre considera como prefijo el nombre del propietario de las tablas, aunque

no se lo indiquemos. De esta forma dos o más usuarios pueden tener tablas que se

llamen igual sin que surjan conflictos. Si quisiéramos acceder a las filas de la tabla dep

del usuario jperez, (ademas de tener privilegios de lectura sobre esa tabla) deberíamos

escribir la siguiente sentencia SQL:

SQL> select * from jperez.dep;

También se puede asociar un alias a las tablas para abreviar los nombres de las tablas.

Un ejemplo se puede ver en la sentencia SQL siguiente:

SQL> select d.nombre from dep d;

Cláusula WHERE

Hasta ahora hemos visto como puede utilizarse la sentencia SELECT para recuperar

todas las columnas o un subconjunto de ellas de una tabla. Pero este efecto afecta a

todas las filas de la tabla, a menos que especifiquemos algo más en la cláusula WHERE.

Es aquí donde debemos proponer la condición que han de cumplir todas las filas para

salir en el resultado de la consulta. La complejidad del criterio de búsqueda es

prácticamente ilimitada, y en él se pueden conjugar operadores de diversos tipos con

funciones de columnas, componiendo expresiones más o menos complejas.

Operadores de Comparación

Operador Operación Ejemplo

= Igualdad select * from emp where

cod_dep = 100;

!=, <>, ^= Desigualdad select * from emp where

cod_dep != 100;

< Menor que select * from emp where

cod_dep < 200;

> Mayor que select * from emp where

Page 81: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 81 

cod_dep > 200;

<= Menor o igual que select * from emp where

cod_dep <= 200;

>= Mayor o igual que select * from emp where

cod_dep >= 200;

in Igual a cualquiera de los miembros

entre paréntesis

select * from emp where

cod_dep in (100, 300);

not in Distinto a cualquiera de los miembros

entre paréntesis

select * from emp where

cod_dep not in (200);

between Contenido en el rango

select * from emp where

cod_emp between 100 and

199;

not

between Fuera del rango

select * from emp where

cod_emp not between 100

and 199;

like

'_abc%'

Contiene la cadena 'abc' a partir del

segundo carácter y luego cualquier

cadena de caracteres

select * from emp where

nombre like 'Ma%';

Operadores de Aritméticos

Operador Operación Ejemplo

+ Suma select nombre, salario+comision from emp where

oficio='VENDEDOR';

- Resta select nombre from emp where sysdate-fecha_alta >

365;

* Producto select nombre, salario*12 from emp;

/ División select nombre, salario/31 from emp;

Page 82: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 82 

Operadores de Cadenas de Caracteres

Operador Operación Ejemplo

|| Concatenación select nombre||oficio from emp;

Cláusula ORDER BY

Se utiliza para especificar el criterio de ordenación de la respuesta a la consulta. Por

defecto la ordenación es ascendente, aunque se puede especificar un orden descendente.

La ordenación se puede establecer sobre el contenido de columnas o sobre expresiones

con columnas. A continuación se puede ver un ejemplo de uso de la cláusula ORDER

BY en la que quiere obtener un listado de los empleados ordenado de manera

descendente por su salario y en caso de igualdad de salario, ordenado ascendentemente

por su nombre.

SQL> select nombre, salario from emp order by salario desc, nombre;

NOMBRE SALARIO

---------- ----------

Cano 450000

Perez 350000

Roncal 350000

Yuste 350000

Recio 300000

Sastre 300000

Martin 235000

Garcia 225000

Garcia 210000

Mateo 200000

Santana 200000

Rueda 175000

Lopez 150000

Sanz 150000

14 rows selected.

Page 83: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 83 

Cláusula DISTINCT

Cuando se realiza una consulta sobre una tabla en la que se extrae información de varias

columnas, puede ocurrir que, si no incluimos la/s columna/s que forman la clave

principal, obtengamos filas repetidas en la respuesta.

Si este comportamiento no nos resulta satisfactorio podemos utilizar la cláusula

DISTINCT para eliminar las filas duplicadas obtenidas como respuesta a una consulta.

Podemos ver como funciona en el siguiente ejemplo, en el que preguntamos por los

distintos oficios de nuestros empleados.

SQL> select oficio from emp;

Sin utilizar la cláusula DISTINCT obtendremos la siguiente respuesta

Funciones

Existen en SQL muchas funciones que pueden complementar el manejo de los datos en

las consultas. Se utilizan dentro de las expresiones y actuan con los valores de las

columnas, variables o constantes.

Se pueden incluir en las clásulas SELECT, WHERE y ORDER BY.

Pueden anidarse funciones dentro de funciones. Y existe una gran variedad de funciones

para cada tipo de datos:

Aritméticas, de cadenas de caracteres, de manejo de fechas, de conversión, otras, de

grupo.

Funciones Aritméticas

Función Cometido Ejemplo Resultado

ABS(n) Calcula el valor absoluto de n. select abs(-15) from

dual; 15

CEIL(n)

Calcula el valor entero

inmediatamente superior o

igual a n.

select ceil(15.7)

from dual; 16

FLOOR(n) Calcula el valor entero

inmediatamante inferior o igual

select floor(15.7)

from dual; 15

Page 84: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 84 

a n.

MOD(m,n) Calcula el resto resultante de

dividir m entre n.

select mod(11,4)

from dual; 3

POWER(m,n) Calcula la potencia n-esima de

m.

select power(3,2)

from dual; 9

ROUND(m,n)

Calcula el redondeo de m a n

decimales. Si n<0 el redondeo

se efectua a por la izquierda del

punto decimal.

select

round(123.456,1)

from dual;

123.5

SQRT(n) Calcula la raíz cuadrada de n. select sqrt(4) from

dual; 2

TRUNC(m,n)

Calcula m truncado a n

decimales (n puede ser

negativo).

select

trunc(123.456,1)

from dual;

123.4

SIGN(n)

Calcula el signo de n,

devolviendo -1 si n<0, 0 si n=0

y 1 si n>0.

select sign(-12)

from dual; -1

Funciones de Cadenas de Caracteres

Función Cometido Ejemplo Resultado

CHR(n)

Devuelve el

carácter

cuyo valor

codificado

es n.

select chr(65) from

dual; A

ASCII(cad)

Devuelve el

valor ascii

de cad.

select ascii('A') from

dual; 65

CONCAT(cad1,cad2) Devuelve

cad1

select

concat(concat(nombre,'

Cano es

Presidente, etc.

Page 85: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 85 

concatenada

con cad2.

Esta

función es

esquivalente

al operador

||.

es '),oficio) from emp;

LOWER(cad)

Devuelve la

cadena cad

con todas

sus letras

convertidas

a

minúsculas.

select

lower('MinUsCulAs')

from dual;

minusculas

UPPER(cad)

Devuelve la

cadena cad

con todas

sus letras

convertidas

a

mayúsculas.

select

upper('maYuSCulAs')

from dual;

MAYUSCULAS

INITCAP(cad)

Devuelve

cad con el

primer

caracter en

mayúsculas.

select initcap('isabel')

from dual; Isabel

LPAD(cad1,n,cad2)

Devuelve

cad1 con

longitud n,

y ajustada a

la derecha,

rellenando

select lpad('P',5,'*')

from dual; ****P

Page 86: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 86 

por la

izquierda

con cad2.

RPAD(cad1,n,cad2)

Devuelve

cad1 con

longitud n,

y ajustada a

la izquierda,

rellenando

por la

derecha con

cad2.

select rpad('P',5,'*')

from dual; P****

REPLACE(cad,ant,nue)

Devuelve

cad en la

que cada

ocurrencia

de la cadena

ant ha sido

sustituida

por la

cadena nue.

select

replace('digo','i','ie')

from dual;

diego

SUBSTR(cad,m,n)

Devuelve la

sudcadena

de cad

compuesta

por n

caracteres a

partir de la

posicion m.

select

substr('ABCDEFG',3,2)

from dual;

CD

LENGTH(cad)

Devuelve la

longitud de

cad.

select length('cadena')

from dual; 6

Page 87: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 87 

Funciones de Manejo de Fechas

Función Cometido Ejemplo Resultado

SYSDATE

Devuelve la

fecha y hora

actuales.

select sysdate from dual; 14-MAR-

97

ADD_MONTHS(d,n)

Devuelve la

fecha d

incrementada

en n meses.

select add_months(sysdate,4)

from dual; 14-JUL-97

LAST_DAY(d)

Devuelve la

fecha del

último día

del mes de d.

select last_day(sysdate) from

dual;

31-MAR-

97

MONTHS_BETWEEN(d1,

d2)

Devuelve la

diferencia en

meses entre

las fechas d1

y d2.

select

months_between(sysdate,'01-

JAN-97') from dual;

2.43409424

NEXT_DAY(d,cad)

Devuelve la

fecha del

primer día de

la semana

cad después

de la fecha d.

select next_day(sysdate,

'sunday') from dual;

16-MAR-

97

Funciones de Conversión de Tipos

Función Cometido Ejemplo Resultado

TO_NUMBER(cad,fmto) Convierte la

cadena cad a un

select

to_number('12345') 124345

Page 88: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 88 

número,

opcionalmente de

acuerdo con el

formato fmto.

from dual;

TO_CHAR(d, fmto)

Convierte la fecha

d a una cadena de

caracteres,

opcionalmente de

acuerdo con el

formato fmto.

select

to_char(sysdate)

from dual;

'14-MAR-

97'

TO_DATE(cad,fmto)

Convierte la

cadena cad de tipo

varchar2 a fecha,

opcionalmente de

acuerdo con el

formato fmto.

select to_date('1-

JAN-97') from dual;

01-JAN-

97

Con las fechas pueden utilizarse varios formatos. Estos formatos permiten modificar la

presentación de una fecha. En la siguiente tabla se presentan algunos formatos de fecha

y el resultado que generan.

Máscaras de Formato Numéricas

Formato Cometido Ejemplo Resultado

cc ó scc Valor del siglo. select to_char(sysdate,'cc')

from dual; 20

y,yyy ó

sy,yyy

Año con coma, con o

sin signo.

select

to_char(sysdate,'y,yyy') from

dual;

1,997

yyyy ó yyy

ó yy ó y

Año sin signo con

cuatro, tres, dos o un

dígitos.

select to_char(sysdate,'yyyy')

from dual; 1997

q Trimestre. select to_char(sysdate,'q') 1

Page 89: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 89 

from dual;

ww ó w Número de la semana

del año o del mes.

select to_char(sysdate,'ww')

from dual; 11

mm Número del mes. select to_char(sysdate,'mm')

from dual; 03

ddd ó dd ó d Número del día del año,

del mes o de la semana.

select to_char(sysdate,'ddd')

from dual; 073

hh ó hh12 ó

hh24

La hora en formato 12h.

o 24h.

select to_char(sysdate,'hh')

from dual; 12

mi Los minutos de la hora. select to_char(sysdate,'mi')

from dual; 15

ss ó sssss

Los segundos dentro del

minuto, o desde las 0

horas.

select to_char(sysdate,'sssss')

from dual; 44159

Máscaras de Formato de Caracteres

Formato Cometido Ejemplo Resultado

syear ó

year Año en Inglés

select

to_char(sysdate,'syear) from

dual;

nineteen

ninety-seven

month o

mon

Nombre del mes o su

abreviatura de tres

letras.

select

to_char(sysdate,'month')

from dual;

march

day ó dy

Nombre del día de la

semana o su abreviatura

de tres letras.

select to_char(sysdate,'day')

from dual; friday

a.m. ó

p.m. El espacio del día.

select to_char(sysdate,'a.m.')

from dual; p.m.

b.c. ó a.d. Indicador del año

respecto al del

select to_char(sysdate,'b.c.')

from dual; a.d.

Page 90: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 90 

nacimiento de Cristo.

Otras Funciones

Función Cometido Ejemplo Resultado

DECODE(var, val1,

cod1, val2, cod2, ...,

defecto)

Convierte el

valor de var, de

acuerdo con la

codificación.

select decode(oficio,

'Presidente', 'P', 'Director',

'D', 'X') from emp;

P, D, X, ...

GREATEST(exp1,

exp2, ...)

Devuelve el

mayor valor de

una lista.

sin ejemplo. sin

ejemplo.

LEAST(cad,fmto)

Devuelve el

menor valor de

una lista.

sin ejemplo. sin

ejemplo.

NVL(val, exp)

Devuelve la

expresión exp si

val es NULL, y

val si en otro

caso.

select

salario+nvl(comision,0)

from emp;

450000,

350000, ...

Cláusula GROUP BY

SQL nos permite agrupar las filas resultado de una consulta en conjuntos y aplicar

funciones sobre esos conjuntos de filas.

La sintaxis es la siguiente:

En la cláusula GROUP BY se colocan las columnas por las que vamos a agrupar. Y en

la cláusula HAVING se especifica la condición que han de cumplir los grupos para

pasar al resultado.

La evaluación de las diferentes cláusulas en tiempo de ejecución se efectúa en el

siguiente orden:

WHERE filtra las filas

GROUP BY crea una tabla de grupo nueva

Page 91: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 91 

HAVING filtra los grupos

ORDER BY clasifica la salida

Un ejemplo de utilización de la selección de grupos puede ser seleccionar los empleados

agrupados por su oficio. Un primer intento de consulta es el siguiente:

SQL> select nombre, oficio from emp group by oficio;

select nombre, oficio from emp

*

ERROR at line 1:

ORA-00979: not a GROUP BY expression

Se presenta un error debido a que cuando se utiliza GROUP BY, las columnas

implicadas en el SELECT y que no aparezcan en la cláusula GROUP BY deben tener

una función de agrupamiento. En otras palabras, la columna nombre debe tener una

función de agrupamiento que actue sobre ella (max, min, sum, count, avg). Si no puede

ser así, deberá llevar dicha columna a la cláusula GROUP BY.

De nuevo, el ejemplo quedará así:

SQL> select count(nombre), oficio from emp group by oficio;

Las funciones de agrupamiento que se pueden utilizar son las siguientes.

Funciones de Agrupamiento

Función Cometido Ejemplo

COUNT(col) Cuenta el número de filas

agrupadas.

select count(nombre),oficio

from emp group by oficio;

AVG(col)

Calcula el valor medio de

todos los valores de la

columna col.

select avg(salario),oficio

from emp group by oficio;

MAX(col)

Calcula el valor máximo de

todos los valores de la

columna col.

select max(salario),oficio

from emp group by oficio;

MIN(col) Calcula el valor mínimo de

todos los valores de la

select min(salario),oficio

from emp group by oficio;

Page 92: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 92 

columna col.

SUM(col) Calcula la suma de los valores

de la columna col.

select sum(salario), oficio

from emp group by oficio;

STDDEV(col)

Calcula la desviación típica de

los valores de la columna col

sin tener en cuenta los valores

nulos.

select stddev(salario), oficio

from emp group by oficio;

VARIANCE(col)

Calcula la varianza de los

valores de la columna col sin

tener en cuenta los valores

nulos.

select variance(salario),

oficio from emp group by

oficio;

Hay que tener en cuenta que los valores nulos no participan en el cálculo de las

funciones de conjuntos. Estas funciones se pueden utilizar con las cláusulas DISTINCT

y ALL. También se pueden utilizar aunque no realicemos agrupación alguna en la

consulta, considerando a toda la tabla como un grupo.

SQL> select count(*) from emp;

COUNT(*)

Expresiones con Sentencias Select

El resultado de cada consulta es un conjunto de filas. Y con conjuntos se pueden realizar

tres operaciones típicas: la unión, la intersección y la diferencia.

Unión, UNION

Combina todas las filas del primer conjunto con todas las filas del segundo. Cualquier

fila duplicada se reducirá a una sóla.

Intersección, INTERSECT

Examinará las filas de los conjuntos de entrada y devolverá aquellas que aparezcan en

ambos. Todas las filas duplicadas serán eliminadas antes de la generación del conjunto

resultante.

Diferencia, MINUS

Page 93: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 93 

Devuelve aquellas filas que están en el primer conjunto pero no en el segundo. Las filas

duplicadas del primer conjunto se reducirán a una fila única antes de empezar la

comparación con el segundo conjunto.

Reglas para el Manejo de los Operadores de Conjuntos:

Pueden ser encadenados en cualquier combinación, siendo evaluados de izquierda a

derecha.

• No existe jerarquía de precedencia en el uso de estos operadores, pero puede ser

forzada mediante paréntesis.

• Pueden ser empleados con conjuntos de diferentes tablas siempre que se

apliquen las siguientes reglas:

• Las columnas son relacionadas en orden, de izquierda a derecha.

• Los nombres de las columnas son irrelevantes.

Los tipos de datos deben coincidir.

Como ejemplo podemos consultar sobre todos los nombres de empleado que trabajan

para los departamentos 100 o 300. Esto se consigue restando a todos los nombres de

empleados, aquellos que están en el departamento 200.

SQL> select nombre from emp

2 minus

3 select nombre from emp where cod_dep=200;

Eliminación

Cuando una tabla ya no es útil y no vamos a volver a necesitarla debe ser borrada. Esta

operación se puede realizar con el comando DROP TABLE.

DROP TABLE tabla [CASCADE CONSTRAINTS];

Se borra la tabla de la base de datos, borrando toda la información contenida en la tabla,

es decir, todas las filas. También se borrará toda la información que sobre la tabla

existiera en el diccionario.

Puede que si alguna columna de esta tabla a borrar sirva como clave ajena de alguna

tabla detalle, impida la eliminación de la tabla, ya que existe una restricción que

requiere de la existencia de la tabla maestra. Esto se puede areglar colocando la coletilla

Page 94: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 94 

CASCADE CONSTRAINTS. Esto produce que las restricciones de la tabla detalle se

borren antes de borrar la tabla maestra.

La siguiente sentencia produce la eliminación de la tabla de departamentos.

SQL> drop table dep cascade constraints;

Table dropped.

Vistas

Una vista es como una ventana a través de la cual se puede consultar o cambiar

información de la tabla a la que está asociada.

Las vistas tienen la misma estructura que una tabla: filas y columnas. La única

diferencia es que sólo se almacena de ellas la definición, no los datos. Los datos que se

recuperan mediante una consulta a una vista se presentarán igual que los de una tabla.

De hecho, si no se sabe que se está trabajando con una vista, nada hace suponer que es

así. Al igual que sucede con una tabla, se pueden insertar, actualizar, borrar y

seleccionar datos en una vista. Aunque siempre es posible seleccionar datos de una

vista, en algunas condiciones existen restricciones para realizar el resto de las

operaciones sobre vistas.

¿Por qué utilizar vistas?

Las vistas pueden proporcionar un nivel adicional de seguridad. Por ejemplo, en la tabla

de empleados, cada responsable de departamento sólo tendrá acceso a la información de

sus empleados. La siguiente sentencia produce la creación de la vista de los empleados

del departamento de administración (cod_dep=100).

SQL> create view ampAdmin as

2 select * from ep where cod_dep=100;

View created.

Las vistas permiten ocultar la complejidad de los datos. Una BD se compone de muchas

tablas. La información de dos o más tablas puede recperarse utilizando una combinación

de dos o más tablas, y estas combinaciones pueden llegar a ser muy confusas. Creando

una vista como resultado de la combinación se puede ocultar la complejidad al usuario.

Las vistas ayudan a mantener unos nombres razonables.

Page 95: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 95 

Creación de una Vista

CREATE VIEW vista [({columna ,}+] AS consulta ;

La vista se crea con las columnas que devuelve una consulta. Si no nos importa que las

columnas de la vista hereden los nombres de las columnas recuperadas en la consulta no

tenemos que especificarlos.

Borrado de una Vista

DROP VIEW vista ;

Operaciones sobre Vistas

Consultas

Las consultas sobre las vistas se tratan de igual modo que sobre las tablas.

Actualizaciones

La información puede ser actualizada en las vistas directamente o a través de las tablas

sobre las que se definen.

Existen algunas restricciones:

Borrado de filas de una tabla a través de una vista

La vista se debe crear con filas de una sola tabla; sin utilizar las cláusulas GROUP BY y

DISTINCT; y sin utilizar funciones de grupo o referencias a pseudocolumnas

(ROWNUM).

Actualización de filas a través de una vista

La vista ha de estar definida según las restricciones anteriores y además ninguna de las

columnas a actualizar debe haber sido definida como una expresión.

Inserción de filas en una tabla a través de una vista

Todas las restricciones y además todas las columnas obligatorias de la tabla asociada

deben estar presentes en la vista.

Vistas de más de una Tabla

Se pueden definir vistas sobre más de una tabla. Por ejemplo, sobre la combinación de

dos tablas.

Podemos querer ver todos los datos de los empleados del departamento Administración.

SQL> create view depAdmin (cod_emp, nombre_emp, nombre_dep, dir)

Page 96: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 96 

2 as select e.cod_emp, e.nombre, d.nombre, d.loc

3 from emp e, dep d

4 where e.cod_dep=d.cod_dep and d.nombre='Administracion';

SQL> select * from depAdmin;

COD_EMP NOMBRE_EMP NOMBRE_DEP DIR

---------- ---------- --------------- ----------

101 Cano Administracion Valladolid

102 Roncal Administracion Valladolid

103 Rueda Administracion Valladolid

104 Martin Administracion Valladolid

105 Sanz Administracion Valladolid

106 Lopez Administracion Valladolid

6 rows selected.

Lo Más SQL*Plus

En este apartado vamos a profundizar un poco en las otras posibilidades que nos brinda

SQL*Plus en los:

• ficheros de comandos, y

• generación de informes,

Ficheros de Comandos

Aunque ya vimos una introducción a los ficheros de comandos en anteriormente, vamos

ahora a profundizar un poco en las posibilidades que nos ofrece SQL*Plus.

En un fichero de comandos se pueden incluir:

• líneas de comentarios,

• líneas de ejecución,

• líneas de comandos SQL, y

Page 97: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 97 

• líneas de comandos SQL*Plus.

Líneas de Comentarios

Se pueden introducir comentarios en una archivo de comandos de tres maneras:

• Utilizando del comando REM del SQL*Plus.

• Utilizando los delimitadores de comentario de SQL /* y */.

• Utilizando los símbolos de comentario PL/SQL "__".

Líneas de Ejecución

Constan de una única barra inclinada, "/", y se introducen a continuación de cada

sentencia SQL indicando su ejecución.

Sustituyen al punto y coma, ";" al final de las sentencias SQL.

Líneas de Comandos SQL

Se puede introducir cualquiera de los comandos SQL enumerados en este curso, y se

ejecutarán de manera secuencial.

Se permite el anidamiento de los ficheros de comandos.

Líneas de Comandos SQL*Plus

SQL*Plus aporta una serie de posibilidades al lenguaje SQL que le acerca un poco mas

a lo que entendemos como un lenguaje de programación.

Se pueden definir constantes y variables, capturar datos del teclado, introducir

parámetros en la llamada de un archivo de comandos, y alguna cosa más.

Variables de Usuario

Se pueden definir Variables de usuario con el comando DEFINE

DEFINE Variable = valor

Para borrar una variable se utiliza el comando UNDEFINE

UNDEFINE variable

Como ejemplo se puede definir la variable OFICIO

SQL> define oficio=analista

Page 98: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 98 

Variables de Sustitución

Las variables de sustitución son un nombre de variable de usuario con el símbolo &

delante. Cuando SQL*Plus detecta una variable de sustitución en un comando, ejecuta

el comando tomando el valor de la variable.

Esto se puede ver en el ejemplo, donde preguntamos por los empleados que son

analistas:

SQL> define oficio=Analista

SQL> define tabla=emp

SQL> select nombre, oficio from &tabla where oficio='&oficio';

old 1: select nombre, oficio from &tabla where oficio='&oficio'

new 1: select nombre, oficio from emp where oficio='Analista'

NOMBRE OFICIO

---------- -----------

Sastre Analista

Recio Analista

Captura de Datos desde el Terminal

En muchas ocasiones es necesario recoger datos desde un terminal, que luego serán

utilizados en el archivo de comandos. Para realizarlo se pueden utilizar dos medios: las

variables de sustitución o los parámetros en la línea de comandos.

Cuando SQL*Plus reconoce una variable de sustitución sin valor asignado se lo pide al

usuario:

SQL> select * from dep where nombre='&nombredep';

Enter value for nombredep: I+D

old 1: select * from dep where nombre='&nombredep'

new 1: select * from dep where nombre='I+D'

COD_DEP NOMBRE LOC

---------- --------------- ----------

200 I+D Boecillo

Page 99: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 99 

Si se desea que SQL*Plus pregunte por el valor de la variable al usuario sólo la primera

vez que se encuentra con ella, se colocará "&&" delante de la variable de usuario.

También se pueden utilizar hasta nueve parámetros en la línea de comandos cuando se

llama a la ejecución de un archivo de comandos.

En el archivo de comandos nos referiremos a los parámetros con las variables &1, &2,

... ,&9 que se corresponden posicionalmente con ellos.

Desde el archivo de comandos se puede hacer referencia a los parámetros cualquier

número de veces y en cualquier orden.

Comandos de Comunicación con el Usuario

Los siguientes comandos proporcionan un medio de comunicación con el usuario:

• PROMPT: presenta un mensaje en la pantalla.

• ACCEPT: Solicita un valor y lo almacena en la variable de usuario que se

especifíque.

• PAUSE: Obliga al usuario a pulsar Return despué de leer un mensaje.

Para ver cómo funcionan sirve el siguiente ejemplo:

prompt Buscar los datos de un empleado.

Pause Pulse Return.

Accept nombremp prompt 'Empleado? '

Select * from emp where nombre='&nombremp';

Otros Comandos

Los siguientes comandos también se pueden incluir en un archivo de comandos:

• CONNECT: para conectarse como otro usuario.

• HELP: para obtener ayuda en línea.

• EXIT: para dejar SQL*PLus y salir al Sistema Operativo.

• DESCRIBE ó DESC: para obtener información sobre la estructura de una tabla.

• HOST o !: para ejecutar un comando del Sistema Operativo.

PRIVILEGIOS DEL SISTEMA

Los roles de sistema se utilizan para distribuir la disponibilidad de los comandos del

sistema utilizados para gestionar la BD. Los privilegios más comunes están en la

Page 100: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 100 

siguiente tabla. En ella se distinguen entre privilegios de manejo de objetos y de gestión

de la BD. La palabra clave ANY significa que ese usuario tiene el privilegio para todos

los esquemas en la BD. Hay que hacer notar que ANY y PUBLIC no son sinónimos.

Privilegio Capacidades

Manejo de Objetos ...

CREATE ANY

INDEX Crear cualquier índice.

CREATE [PUBLIC]

SYNONYM Crear sinónimos [públicos].

CREATE [ANY]

TABLE

Crear tablas. El usuario debe tener cuota en el espacio de

tablas, o ha de tener asignado el privilegio UNLIMITED

TABLESPACE.

CREATE [ANY]

VIEW Crear vistas.

ALTER ANY INDEX Alterar cualquier índice.

ALTER ANY TABLE Alterar cualquier tabla

DROP ANY INDEX Borrar cualquier índice.

DROP ANY

SYNONYM Borrar cualquier sinónimo.

DROP PUBLIC

SYNONYM Borrar sinónimos públicos.

DROP ANY VIEW Borrar cualquier vista.

DROP ANY TABLE Borrar cualquier tabla.

SELECT ANY

TABLE Efectuar selecciones de cualquier tabla o vista.

INSERT ANY TABLE Insertar en cualquier tabla o vista.

DELETE ANY

TABLE Borrar filas de cualquier tabla o vista, y también truncar.

ALTER SESSION Alterar los parámetros de la sesión.

Page 101: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 101 

CREATE SESSION Conectarse a la BD.

Gestión de la BD ...

CREATE PROFILE Crear perfiles de usuario.

CREATE ROLE Crear roles.

CREATE

ROLLBACK

SEGMENT

Creación de segmentos de rollback.

CREATE

TABLESPACE Crear espacios de tablas.

CREATE USER Crear usuarios.

ALTER PROFILE Alterar perfiles existentes.

ALTER ANY ROLE Alterar cualquier rol.

ALTER ROLLBACK

SEGMENT Alterar segmentos de rollback.

ALTER

TABLESPACE Alterar espacios de tablas.

ALTER USER Alterar usuarios.

DROP PROFILE Borrar un perfil existente.

DROP ANY ROLE Borrar cualquier rol.

DROP ROLLBACK

SEGMENT Borrar un segmento de rollback existente.

DROP TABLESPACE Borrar un espacio de tablas.

DROP USER Borrar un usuario. Añadir CASCADE si el usuario posee

objetos.

ALTER DATABASE Permite una sentencia ALTER DATABASE.

GRANT ANY

PRIVILEGE Otorgar cualquiera de estos privilegios.

GRANT ANY ROLE Otorgar cualquier rol a un usario.

Page 102: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 102 

UNLIMITED

TABLESPACE Puede usar una cantidad de almacenamiento ilimitada.

DROP PROFILE Borrar un perfil existente.

Los privilegios se pueden agrupar en roles, para así satisfacer a distintos tipos de

usuarios. En la instalación se crea un rol llamado OSOPER que sirve para los operarios

de la máquina donde está la BD y permite realizar copias de seguridad en frio y en

caliente. Los privilegios de OSOPER son STARTUP, SHUTDOWN, ALTER

DATABASE OPEN/MOUNT, ALTER DATABASE BACKUP, ARCHIVE LOG,

RECOVER y RESTRICTED SESSION.

Se pueden crear nuevos roles. Por ejemplo, podemos crear un rol llamado

creadorCuentas que sólo pueda crear usuarios y no pueda realizar ninguna otra

operación de DBA. Las sentencias que permiten hacer esto son las siguientes:

SVRMGR> create role creadorCuentas;

Statement processed.

SVRMGR> grant create session, create user to creadorCuentas;

Statement processed.

Oracle incluye otros tres roles de sistema: CONNECT, RESOURCE y DBA, cuyos

privilegios son:

Rol Privilegios

CONNECT alter session, create session, create cluster, create table, create

view, create synonym, create sequence, create database link

RESOURCE create cluster, create table, create procedure, create sequence,

create trigger

DBA todos los privilegios de sistema con la opcion with admin option

Protegidos por passwords

Los passwords puede proteger tanto cuentas como roles. Los passwords se fijan a la

hora de la creación de ambos y se pueden modificar con los comandos ALTER USER y

ALTER ROLE, respectivamente.

Page 103: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 103 

No es necesario asignar un password a un rol, pero si tiene uno debe ser especificado

por el usuario cuando se asigna ese rol.

Gestionando Privilegios

Los privilegios dan acceso a los usuarios a los datos que no poseen. Los roles con

grupos de privilegios que facilitan la administración de los privilegios. Pero los

privilegios se pueden manejar de manera explícita en algunas circunstancias.

Los privilegios se crean via el comando GRANT y son registrados en el diccionario de

datos.

Los privilegios que pueden otorgarse sobre objetos son los siguientes:

Privilegio Capacidades Otorgadas

SELECT Puede consultar a un objeto.

INSERT

Puede insertar filas en una tabla o vista. Puede especificarse

las columnas donde se permite insertar dentro de la tabla o

vista.

UPDATE

Puede actualizar filas en una tabla o vista. Puede especificarse

las columnas donde se permite actualizar dentro de la tabla o

vista.

DELETE Puede borrar filas dentro de la tabla o vista.

ALTER Puede alterar la tabla.

INDEX Puede crear índices de una tabla.

REFERENCES Puede crear claves ajenas que referencie a esta tabla.

EXECUTE Puede ejecutar un procedimieto, paquete o función.

Haciendo un privilegio PUBLIC lo hace disponible a todos los usuarios de la BD.

Aunque los privilegios se puedan otorgar individualmente, no resulta razonable basar la

gestión de los privilegios en su asignación individual. La gestión de los privilegios se

facilita con la utilización de los roles. A continuación se puede ver como se crean dos

roles, el ALUMNOS que permite establecer una sesión, y el rol INSERTA_PEREZ que

permite insertar y seleccionar en la tabla emp de perez:

Page 104: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 104 

SVRMGR> create role alumnos;

Statement processed.

SVRMGR> grant create session to alumnos;

Statement processed.

SVRMGR> create role inserta_perez;

Statement processed.

SVRMGR> grant select, insert on perez.emp to inserta_perez;

Statement processed.

Se pueden asignar roles a roles:

SVRMGR> grant usuarios to inserta_perez;

Los roles pueden asignarse a los usuarios. Así, podemos asignar el rol

INSERTA_PEREZ al usuario alu20:

SVRMGR> grant inserta_perez to alu20;

Los roles se pueden denegar con el comando REVOKE.

Listar Privilegios Otorgados

La información de los privilegios otorgados se almacena en el diccionario de datos.

Estos datos son accesibles a través de las siguientes vistas del diccionario de datos:

Vista Contenidos

DBA_ROLES Nombres de los roles y su estado del password.

DBA_ROLES_PRIVS Usuarios a los que han sido otorgados roles.

DBA_SYS_PRIVS Usuarios a los que han sido otorgados privilegios del

sistema.

DBA_TAB_PRIVS Usuarios a los que han sido otorgados privilegios sobre

objetos.

DBA_COL_PRIVS Usuarios a los que han sido otorgados privilegios sobre

columnas de tablas.

ROLE_ROLE_PRIVS Roles que han sido otorgados a otros roles.

ROLE_SYS_PRIVS Privilegios de sistema que han sido otorgados a roles.

Page 105: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 105 

ROLE_TAB_PRIVS Privilegios de tabla que han sido otorgados a roles.

AUDITORÍA DE SEGURIDAD

El SGBD Oracle tiene la capacidad de auditar todas las acciones que tienen lugar en la

BD. Se pueden auditar tres tipos de acciones:

• intentos de entrada en cuentas de la BD.

• accesos a los objetos de la BD.

• acciones sobre la BD.

La BD registra todos los intentos de acción, tanto los exitosos como los infructuosos,

aunque es un parámetro configurable.

Para habilitar la capacidad de auditoría, se debe fijar el parámetro AUDIT_TRAIL en el

fichero init.ora. Los registros de auditoría se almacenan en la tabla SYS.AUD$ o bien

su gestión se deja al SO. Cuando se decide utilizar la tabla SYS.AUD$ esta debe

revisarse periódicamente, por si hiciera falta truncarla debido a que su aumento de

tamaño puede causar problemas de espacio en el tablespace SYSTEM. Los valores del

parámetro AUDIT_TRAIL son los que se exponen en la siguiente tabla:

Valor Descripción

NONE Deshabilita la auditoría

BD Habilita la auditoría, escribiendo en la tabla SYS.AUD$.

OS Habilita la auditoría, dejando al SO su gestión.

PL/SQL

Lenguaje de programación incrustado en Oracle y PostgreSQL.

El PL/SQL soporta todas las consultas y manipulación de datos que se usan en SQL,

pero incluye nuevas características:

• El manejo de variables.

• Estructuras modulares.

Page 106: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 106 

• Estructuras de control de flujo y toma de decisiones.

• Control de excepciones.

• El lenguaje PL/SQL está incorporado en:

• Servidor de la base de datos.

• Herramientas de Oracle (Forms, Reports, ...).

En un entorno de base de datos los programadores pueden construir bloques PL/SQL

para utilizarlos como procedimientos o funciones, o bien pueden escribir estos bloques

como parte de scripts SQL*Plus.

Los programas o paquetes de PL/SQL se pueden almacenar en la base de datos como

otro objeto, y todos los usuarios que estén autorizados tienen acceso a estos paquetes.

Los programas se ejecutan en el servidor para ahorrar recursos a los clientes.

Tipos de datos Oracle/PLSQL

A continuación se muestra un listado de los tipos de datos disponibles en Oracle y

PLSQL. Hemos tratado de diferenciar los tipos de datos entre las versiones de Oracle 8i

y Oracle 9i.

  

  

  

 

Tipo de dato / Sintaxis

Oracle 8i Oracle 9i Descripción

dec(p, e) La precisión máxima es de 38 dígitos.

Donde p es la precisión y e la escala.

Por ejemplo: dec(3,1) es un número que tiene 2 dígitos antes del decimal y un dígito después del decimal.

decimal(p, e) La precisión máxima es de 38 dígitos.

Donde p es la precisión y e la escala.

Por ejemplo: decimal(3,1) es un número que tiene 2 dígitos antes

Page 107: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 107 

del decimal y un dígito después del decimal.

double precision

float La precisión máxima es de 38 decimales.

int

integer

numeric(p, e) La precisión máxima es de 38 dígitos.

Donde p es la precisión y e la escala.

Por ejemplo: numeric(7,2) es un número que tiene 5 dígitos antes del decimal y 2 dígitos después del decimal.

number(p, e) La precisión máxima es de 38 dígitos.

Donde p es la precisión y e la escala.

Por ejemplo: number(7,2) es un número que tiene 5 dígitos antes del decimal y 2 dígitos después del decimal.

real

smallint

char (tamaño) Hasta 32767 bytes en PLSQL.

Hasta 2000 bytes en Oracle 8i/9i.

Donde tamaño es el número de caracteres a almacenar. Son cadenas de ancho fijo. Se rellena con espacios.

varchar2 (tamaño)

Hasta 32767 bytes en PLSQL.

Hasta 4000 bytes en Oracle 8i/9.i

Donde tamaño es el número de caracteres a almacenar. Son cadenas de ancho variable.

long Hasta 2 gigabytes. Son cadenas de ancho variable.

raw Hasta 32767 bytes en PLSQL. Son cadenas binarias de ancho

Page 108: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 108 

Hasta 2000 bytes en Oracle 8i/9i. variable.

long raw Hasta 2 gigabytes. Son cadenas binarias de ancho variable.

date Una fecha entre el 1 de Enero de 4712 A.C. y el 31 de Diciembre de 9999 D.C.

timestamp (fractional seconds precision)

No soportado por Oracle 8i.

fractional seconds precision debe ser un número entre 0 y 9. (El valor por defecto es 6)

Incluye año, mes día, hora, minutos y segundos.

Por ejemplo: timestamp(6)

timestamp (fractional seconds precision) with time zone

No soportado por Oracle 8i.

fractional seconds precision debe ser un número entre 0 y 9. (El valor por defecto es 6)

Incluye año, mes día, hora, minutos y segundos; con un valor de desplazamiento de zona horaria.

Por ejemplo: timestamp(5) with time zone

timestamp (fractional seconds precision) with local time zone

No soportado por Oracle 8i.

fractional seconds precision debe ser un número entre 0 y 9. (El valor por defecto es 6)

Incluye año, mes día, hora, minutos y segundos; con una zona horaria expresada como la zona horaria actual.

Por ejemplo: timestamp(4) with local time zone

interval year (year precision) to month

No soportado por Oracle 8i.

year precision debe ser un número entre 0 y 9. (El valor por defecto es 2)

Período de tiempo almacenado en años y meses.

Por ejemplo: interval year(4) to month

interval day (day precisionel

Datos binarios de ancho fijo.

Page 109: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 109 

bloque en el fichero de la base de datos;

RRRR es la fila del bloque; FFFFF es el fichero de la base de datos.

Cada registro de la base de datos tiene una dirección física o rowid.

urowid [tamaño]

Hasta 2000 bytes. Rowid universal. Donde tamaño es opcional.

boolean Válido en PLSQL, este tipo de datos no existe en Oracle 8i/9i.

nchar (tamaño)

Hasta 32767 bytes en PLSQL. Hasta 2000 bytes en Oracle 8i/9i.

Donde tamaño es el número de caracteres a almacenar. Cadena NLS de ancho fijo.

nvarchar2 (tamaño)

Hasta 32767 bytes en PLSQL. Hasta 4000 bytes en Oracle 8i/9i.

Donde tamaño es el número de caracteres a almacenar. Cadena NLS de ancho variable.

bfile Hasta 4 gigabytes. Localizadores de archivo apuntan a un objeto binario de sólo lectura fuera de la base de datos.

blob Hasta 4 gigabytes. Localizadores LOB apuntan a un gran objeto binario dentro de la base de datos.

clob Hasta 4 gigabytes. Localizadores LOB apuntan a un gran objeto de caracteres dentro de la base de datos.

nclob Hasta 4 gigabytes. Localizadores LOB apuntan a un gran objeto NLS de caracteres dentro de la base de datos.

Page 110: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 110 

Identificadores

Un identificador es un nombre que se le pone a un objeto que interviene en un

programa, que puede ser variable, constante, procedimientos, excepciones, cursores...

Debe tener un máximo de 30 caracteres que empiece siempre por una letra, y puede

contener letras, números, los símbolos $, #, _, y mayúsculas y minúsculas

indiferentemente. Los identificadores no pueden ser palabras reservadas (SELECT,

INSERT, DELETE, UPDATE, DROP).

Operadores  

(suma) - (resta)

• (multiplicación) 

/ (división)

•  o (exponente) 

Operador de asignación := (dos puntos + igual)

Operadores aritméticos

Operadores relacionales o de comparación

= (igual a)

<>, != (distinto de)

< (menor que)

> (mayor que)

>= (mayor o igual a)

<= (menor o igual a)

Operador de concatenación

||

Comentarios /* comentario de dos o más líneas */

-- comentario de una línea

Page 111: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 111 

 

Variables Las variables son nombres para procesar los elementos de los datos. Declaración:

Nombre_variable tipo [NOT NULL] [:= valor | DEFAULT valor]

:= y DEFAULT son lo mismo. Si ponemos NOT NULL es obligatorio inicializar la

variable.

Ejemplos:

num_dep NUMBER(2) NOT NULL :=20

num_emple VARCHAR2(15) DEFAULT ‘Pedro’

También se puede definir una variable a partir de un campo mediante los atributos

%TYPE y %ROWTYPE, con esto damos el tipo y longitud a la variable de otra

variable u objeto ya definido.

%TYPE es la que se utiliza normalmente, %ROWTYPE es para claves de registro. El

NOT NULL y el valor inicial no se heredan, sólo el tipo de dato y longitud de ese dato.

Por ejemplo:

num_dep emple.dept_no%TYPE

Constantes

Las constantes son como las variables pero no puede modificarse su valor. Se declaran

de la siguiente manera:

nombre_constante CONSTANT tipo_de_dato := valor

Por ejemplo, el IVA es un valor fijo, y para declararlo lo haríamos de la siguiente

manera:

Imp_iva constant number(2,2) := 12,5

BLOQUE PL/SQL

Bloque es la unidad de estructura básica en los programas PL/SQL. Supone una mejora

en el rendimiento, pues se envían los bloques completos al servidor para ser procesados

en lugar de enviar cada secuencia SQL.

Partes de un bloque:

Page 112: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 112 

• Zona de declaraciones: zona opcional. Se declaran los objetos locales (variables,

constantes...).

• Zona de instrucciones: zona obligatoria.

• Zona de tratamiento de excepciones: zona opcional. Se tratan excepciones en el

programa.

Forma de crear un bloque:

[ DECLARE | IS / AS ]

<declaraciones>

BEGIN

<instrucciones>

[ EXCEPTION ]

<tratamiento de excepciones>

END;

/

La barra "/" siempre se pone al final para ejecutar el bloque.

TIPOS DE BLOQUES

• Anónimo (sin nombre)

Siempre comienza con DECLARE o directamente con BEGIN.

Ejemplo 1:

BEGIN

DBMS_OUTPUT.PUT_LINE (‘Hola’);

END;

/

DBMS_OUTPUT es un depurador de Oracle que sirve para visualizar cualquier cosa,

pero antes lo debemos tener activado:

SET SERVEROUTPUT ON;

Ejemplo 2:

DECLARE

v_precio number;

BEGIN

select pvp into v_precio

Page 113: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 113 

from tarticulos

where codigo=100;

dbms_output.put_line (v_precio);

END;

/

Ejemplo 3:

El siguiente bloque anónimo nos muestra la fecha actual con el formato “Martes, 18 de

marzo de 1998, a las 13:04:55”.

DECLARE

fecha date;

BEGIN

select sysdate into fecha from dual;

dbms_output.put_line (to_char(fecha,

'day", "dd" de "month" de "yyyy", a las "hh24:mi:ss'));

END;

/

• Subprogramas (tienen nombre)

Se pueden almacenar en la base de datos.

Existen dos tipos de subprogramas: Procedimientos (PROCEDURE) y Funciones

(FUNCTION)

• Procedimientos en PLSQL

Los procedimientos tienen la utilidad de fomentar la reutilización de programas que se

usan comúnmente. Una vez compilado, queda almacenado en la base de datos (por eso

es también llamado 'Procedimietno almacenado') y puede ser utilizado por múltiples

aplicaciones.

La sintaxis es la siguiente

CREATE [OR REPLACE] PROCEDURE nombre_procedimiento

[nombre_parametro modo tipodatos_parametro ]

IS | AS

bloque de código

Donde "modo" puede contener los valores IN, OUT, IN OUT. Por defecto tiene el valor

IN si no se pone nada. IN indica que el parámetro es de entrada y no se podrá modificar.

Page 114: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 114 

OUT indica que el parámetro es de salida con lo que el procedimiento devolverá un

valor en él. IN OUT indica que el parámetro es de entrada/salida. Con lo que al llamar

al procedimiento se le dará un valor que luego podrá ser modificado por el

procedimiento y devolver este nuevo valor.

"tipodatos_parametro indica el tipo de datos que tendrá el parámetro según lo indicado

en Tipos de datos Oracle/PLSQL

Para borrar un procedimiento almacenado de la base de datos

DROP PROCEDURE nombre_procedimiento

Para utilizar un procedimiento almacenado de la base de datos

Simplemente se lo llama desde un bloque anónimo (desde la línea de comandos),

previamente habiendo inicializado el/los parametro/s (en caso que existan).

DECLARE

nombre_parametro tipodatos_parametro;

BEGIN

nombre_parametro tipodatos_parametro := valor_de_inicializacion;

nombre_procedimiento (nombre_parametro => nombre_parametro);

END;

/

FUNCIONES EN PL/SQL

Una función es un bloque de código PL/SQL que tiene las mismas características que

un procedimiento almacenado. La diferencia estriba que una función devuelve un valor

al retornar. Al devolver un valor puede ser llamada como parte de una expresión.

La sintaxis sería

CREATE [OR REPLACE] FUNCTION nombre_función

[nombre_parámetro modo tipodatos_parametro ]

RETURN tipodatos_retorno IS | AS

bloque de código

Donde "modo" puede contener los valores IN, OUT, IN OUT. Por defecto tiene el valor

IN si no se pone nada. IN indica que el parámetro es de entrada y no se podrá modificar.

Page 115: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 115 

OUT indica que el parámetro es de salida con lo que el procedimiento devolverá un

valor en él. IN OUT indica que el parámetro es de entrada/salida. Con lo que al llamar

al procedimiento se le dará un valor que luego podrá ser modificado por el

procedimiento y devolver este nuevo valor. Sin embargo, en este caso solo tendría

sentido (por el concepto de función en sí mismo) declarar parámetros del tipo IN y

devolver el valor como retorno de la función.

"tipodatos_parametro" y "tipodatos_retorno" indican el tipo de datos que tendrá el

parámetro y el valor de retorno de la función respectivamente según lo indicado en

Tipos de datos Oracle/PLSQL

Para borrar una función de la base de datos

DROP FUNCTION nombre_función

Los procedimientos y funciones se pueden agrupar en unas estructuras llamadas

Paquetes.

TRIGGERS

Un trigger o disparador se ejecuta ante un determinado evento de manera automática.

Generalmente se utilizan para garantizar que una determinada acción siempre se realiza

después de realizar una tarea determinada. Se debe tener cuidado con este tipo de

estructuras puesto que un uso excesivo puede dar lugar a dependencias difíciles de

mantener. Además se deben tener muy claros las restricciones de integridad para evitar

problemas.

La sintaxis sería

A nivel de sentencia:

CREATE [OR REPLACE] TRIGGER nombre_trigger

momento_ejecución evento [evento] ON nombre_tabla

bloque PLSQL;

A nivel de registro:

CREATE [OR REPLACE] TRIGGER nombre_trigger

momento_ejecución evento [evento] ON nombre_tabla

[REFERENCING OLD AS old | NEW AS new]

FOR EACH ROW

[WHEN condición]

Page 116: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 116 

bloque PLSQL;

Donde "momento_ejecución" indica cuando se ejecuta el trigger automáticamente.

Puede contener los valores BEFORE ó AFTER.

"evento" indica la operación que provoca la ejecución de este bloque. Puede contener

los valores INSERT, UPDATE ó DELETE.

"old" indica el nombre que se le da al registro con los valores antiguos que se tenían

antes de la ejecución de la operación que activó el trigger. Mientras que "new" indica el

valor que tiene actualmente después de dicha operación.

Con la cláusula "WHEN" se puede indicar una restricción que haga que el trigger se

ejecute o no. Por ejemplo se puede indicar que el trigger se ejecute solo si el campo

"campo1" de la tabla tiene un valor mayor que 50.

La cláusula "FOR EACH ROW" indica que el trigger es a nivel de registro.

Para eliminar un trigger:

DROP TRIGGER nombre_trigger

EJECICIOS ORACLE 9i

Ejercitico N.-1

CREACIÓN DE USUARIOS

SQL> CREATE USER DSANCHEZ

2 IDENTIFIED BY DIEGO

3 DEFAULT TABLESPACE SEPTIMO3;

Usuario creado.

SQL> GRANT CONNECT, RESOURCE TO DSANCHEZ;

SQL> CONNECT DSANCHEZ/DIEGO@SEPTIMO

Conectado

Page 117: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 117 

CREACIÓN DE TABLAS

SQL> CREATE TABLE UNO

2 (A NUMBER(3)

3 , B VARCHAR (30));

Tabla creada.

INSERTAR DATOS A LAS TABLAS

SQL> INSERT INTO UNO VALUES (1,'LUIS');

SQL> INSERT INTO UNO VALUES (2,'CARLOS');

SQL> COMMIT;

CONSULTAS A LA TABLA

SQL> SELECT * FROM UNO;

A B

--------- ------------------------------

1 LUIS

2 CARLOS

Ejercicio N.- 2

CREACIÓN DE USUARIOS

SQL> CREATE USER US2

2 IDENTIFIED BY PUS2

3 PASSWORD EXPIRE

4 ACCOUNT LOCK;

Page 118: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 118 

Usuario creado.

MODIFICAR USUARIO

SQL> ALTER USER US2

2 ACCOUNT UNLOCK;

Usuario modificado.

INGRESAR DEL USUARIO

SQL> CONNECT US2/DIEGO@SEPTIMO;

Conectado.

Ejercicio N. - 3

CREAR USUARIO

SQL> CREATE USER INVENTARIO2

2 IDENTIFIED BY US2

3 DEFAULT TABLESPACE SEPTIMO2

4 ACCOUNT UNLOCK;

Usuario creado.

INGRESAR AL USUARIO

CONNECT SYSTEM/MASTER@SEPTIMO;

Conectado.

SQL> CONNECT INVENTARIO2/US2@SEPTIMO;

Conectado.

Page 119: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 119 

CREAR TABLAS

SQL> CREATE TABLE PROVEEDORES (

2 COD_PROV NUMBER(5) CONSTRAINT PK_PROVEEDOR PRIMARY KEY,

3 NOM_PROV VARCHAR(40) NOT NULL,

4 DIR_PROV VARCHAR(50),

5 TEL_PROV CHAR(9),

6 RUC_PROV CHAR(13));

Tabla creada.

SQL> CREATE TABLE CLIENTES(

2 COD_CLI NUMBER(5) CONSTRAINT PK_CLIENTES PRIMARY KEY,

3 NOM_CLI VARCHAR(40) NOT NULL,

4 DIR_CLI VARCHAR(50),

5 TEL_CLI CHAR(9),

6 RUC_CLI CHAR(13));

Tabla creada.

SQL> CREATE TABLE CATEGORIAS(

2 COD_CAT NUMBER(3) CONSTRAINT PK_CATEGORIAS PRIMARY KEY,

3 NOM_CAT VARCHAR(30) NOT NULL);

Tabla creada.

Page 120: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 120 

SQL> CREATE TABLE PRODUCTOS(

2 COD_PROD NUMBER(10) CONSTRAINT PK_PRODUCTO PRIMARY KEY,

3 NOM_PROD VARCHAR(200) NOT NULL,

4 EXIS_PROD NUMBER(10) CONSTRAINT CH_EXIST CHECK(EXIS_PROD>0),

5 COST_PROD NUMBER(10,2) NOT NULL,

6 PRE_VENT NUMBER (10,2) NOT NULL,

7 COD_CAT NUMBER(3) CONSTRAINT FK_CATEGORIA REFERENCES CATEGORIAS);

Tabla creada.

SQL> CREATE TABLE COMPRAS(

2 NUM_COM NUMBER(10) CONSTRAINT PK_COMPRAS PRIMARY KEY,

3 FECH_COM DATE DEFAULT SYSDATE,

4 TOT_COM NUMBER (10,2),

5 COD_PROV NUMBER(5) CONSTRAINT FK_PROVEEDOR REFERENCES PROVEEDORES

6 );

Tabla creada.

SQL> CREATE TABLE VENTAS(

2 NUM_FAC NUMBER(10) CONSTRAINT PK_VENTAS PRIMARY KEY,

3 FECH_VEN DATE DEFAULT SYSDATE,

Page 121: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 121 

4 SUBT_VEN NUMBER (10,2) NOT NULL,

5 DES_VEN NUMBER (10,2) NOT NULL,

6 IVA_POR NUMBER (10,2) NOT NULL,

7 IVA_VAL NUMBER (10,2) NOT NULL,

8 TOT_VEN NUMBER (10,2) NOT NULL,

9 COD_CLI NUMBER(5) CONSTRAINT FK_CLIENTES REFERENCES CLIENTES

10 );

Tabla creada.

SQL> CREATE TABLE DETALLE_COMPRAS(

2 COD_DET_COM NUMBER (10) CONSTRAINT PK_DET_COM PRIMARY KEY,

3 CANT_COM NUMBER (10) CONSTRAINT CH_CANTCONP CHECK (CANT_COM >0),

4 COST_COM NUMBER (10,2) CONSTRAINT CH_COSTCOM CHECK (COST_COM >0),

5 NUM_COM NUMBER (10) CONSTRAINT FK_COMPRAS REFERENCES COMPRAS,

6 COD_PROD NUMBER (10) CONSTRAINT FK_PROCOMP REFERENCES PRODUCTOS

7 );

Tabla creada.

SQL> CREATE TABLE DETALLE_VENTAS (

2 COD_DET_VEN NUMBER (10) CONSTRAINT PK_DET_VEN PRIMARY KEY,

Page 122: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 122 

3 CANT_VEN NUMBER (10) CONSTRAINT CH_CANTVEN CHECK (CANT_VEN >0),

4 COST_VEN NUMBER (10,2) CONSTRAINT CH_COSTVEN CHECK (COST_VEN >0),

5 PRE_VEN NUMBER (10,2) CONSTRAINT CH_PREVEN CHECK (PRE_VEN >0),

6 NUM_FAC NUMBER (10) CONSTRAINT FK_VENTAS REFERENCES VENTAS,

7 COD_PROD NUMBER (10) CONSTRAINT FK_PROVEN REFERENCES PRODUCTOS

8 );

Tabla creada.

CONSULTAS DE TABLAS

SQL> SELECT * FROM TAB;

TNAME TABTYPE CLUSTERID

------------------------------ ------- ---------

CATEGORIAS TABLE

CLIENTES TABLE

COMPRAS TABLE

DETALLE_COMPRAS TABLE

DETALLE_VENTAS TABLE

PRODUCTOS TABLE

PROVEEDORES TABLE

VENTAS TABLE

Page 123: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 123 

CREACIÓN DE TRIGGER O DISPARADOR

SQL> CREATE OR REPLACE TRIGGER TRGAUTONCLIENTES

2 BEFORE INSERT ON CLIENTES

3 FOR EACH ROW

4 DECLARE

5 X NUMBER;

6 BEGIN

7 SELECT SEQCLIENTES.NEXTVAL INTO X FROM DUAL;

8 :NEW.COD_CLI:=X;

9 END;

10 /

Disparador creado.

CREATE OR REPLACE TRIGGER TRGAUTONPRODUCTOS

BEFORE INSERT ON PRODUCTOS

FOR EACH ROW

DECLARE

X NUMBER;

BEGIN

SELECT SEQPRODUCTOS.NEXTVAL INTO X FROM DUAL;

:NEW.COD_PROD:=X;

END;

/

Page 124: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 124 

SQL> CREATE OR REPLACE TRIGGER TRGAUTONDETALLECOMPRA

2 BEFORE INSERT ON DETALLE_COMPRAS

3 FOR EACH ROW

4 DECLARE

5 X NUMBER;

6 BEGIN

7 SELECT SEQDETALLECOMPRA.NEXTVAL INTO X FROM DUAL;

8 :NEW.COD_DET_COM:=X;

9 END;

10 /

Disparador creado.

SQL> CREATE SEQUENCE SEQDETALLEVENTA

2 START WITH 1

3 INCREMENT BY 1;

Secuencia creada.

SQL> CREATE OR REPLACE TRIGGER TRGAUTONDETALLEVENTA

2 BEFORE INSERT ON DETALLE_VENTAS

3 FOR EACH ROW

4 DECLARE

5 X NUMBER;

6 BEGIN

7 SELECT SEQDETALLEVENTA.NEXTVAL INTO X FROM DUAL;

Page 125: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 125 

8 :NEW.NUM_FAC:=X;

9 END;

10 /

Disparador creado.

CREACIÓN DE PL/SQL

1.-

SQL> DECLARE

2 A NUMBER;

3 B NUMBER;

4 C NUMBER;

5 BEGIN

6 A:=5;

7 B:=&VALORB;

8 C:=A+B;

9 DBMS_OUTPUT.PUT_LINE('LA SUMA ES:'||C);

10 END;

11 /

Introduzca un valor para valorb: 5

antiguo 7: B:=&VALORB;

nuevo 7: B:=5;

LA SUMA ES:10

2.-

SQL> DECLARE

2 CONTADOR NUMBER:=0;

3 BEGIN

4 LOOP

5 DBMS_OUTPUT.PUT(CONTADOR||'');

Page 126: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 126 

6 CONTADOR:=CONTADOR+1;

7 EXIT WHEN CONTADOR =10;

8 END LOOP;

9 DBMS_OUTPUT.PUT_LINE('FIN DE CICLO');

10 END;

11 /

0123456789FIN DE CICLO

3.-

SQL>

SQL> DECLARE

2 CONTADOR NUMBER:=0;

3 BEGIN

4 WHILE CONTADOR <10 LOOP

5 DBMS_OUTPUT.PUT(CONTADOR||'');

6 CONTADOR:=CONTADOR+1;

7 END LOOP;

8 DBMS_OUTPUT.PUT_LINE('FIN DE CICLO');

9 END;

10 /

01234567890123456789FIN DE CICLO

4.-

SQL> DECLARE

2 X NUMBER;

3 BEGIN

4 X:= &VALORX;

5 IF (X MOD 2=0) THEN DBMS_OUTPUT.PUT('MULTIPLO/2 ');

6 ELSIF X MOD 3=0 THEN DBMS_OUTPUT.PUT('MULTIPLO/3 ');

7 ELSIF X MOD 5=0 THEN DBMS_OUTPUT.PUT('MULTIPLO/5 ');

8 ELSE DBMS_OUTPUT.PUT('MULTIPLO DE OTRO NUMERO');

9 END IF;

10 DBMS_OUTPUT.PUT_LINE ('FIN');

Page 127: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 127 

11 END;

12 /

Introduzca un valor para valorx: 6

antiguo 4: X:= &VALORX;

nuevo 4: X:= 6;

MULTIPLO/2 FIN

EJERCICIO N.- 4

CREAR TABLA SUELDOS

SQL>

SQL> CREATE TABLE SUELDOS (

2 NUM_EM NUMBER (10) CONSTRAINT PK_SUELDO PRIMARY KEY,

3 NOMBRE VARCHAR(200) NOT NULL,

4 NHORAS NUMBER(10) NOT NULL,

5 VHORA NUMBER(10,2));

 

INGRESO DE DATOS

SQL> INSERT INTO SUELDOS VALUES ('1','DIEGO SANCHEZ','30','4');

SQL> INSERT INTO SUELDOS VALUES ('2','JUAN PEREZ','50','2');

SQL> INSERT INTO SUELDOS VALUES ('3','RODOLFO VELASCO','25','5');

CREAR PROCEDIMENTO PL/SQL

SQL> DECLARE

2 MCODIGO CHAR(5);

3 MNOMB VARCHAR2(30);

4 MNUMHORAS NUMBER;

5 MVALHORA NUMBER;

Page 128: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 128 

6 MSUELDO NUMBER;

7 BEGIN

8 MCODIGO:=&CODIGO;

9 SELECT NOMBRE INTO MNOMB FROM SUELDOS

10 WHERE NUM_EM = MCODIGO;

11 SELECT NHORAS INTO MNUMHORAS FROM SUELDOS

12 WHERE NUM_EM = MCODIGO;

13 SELECT VHORA INTO MVALHORA FROM SUELDOS

14 WHERE NUM_EM = MCODIGO;

15 MSUELDO:= MNUMHORAS * MVALHORA;

16 DBMS_OUTPUT.PUT_LINE (MNOMB||'SU SUELDO ES:'||MSUELDO);

17 END;

18 /

Introduzca un valor para codigo: 1

antiguo 8: MCODIGO:=&CODIGO;

nuevo 8: MCODIGO:=1;

DIEGO SANCHEZSU SUELDO ES:120

EJERCICIO N.-5

DECLARE

MCODIGO CHAR(5);

MNOMB VARCHAR2(30);

MNUMHORAS NUMBER;

MVALHORA NUMBER;

MSUELDO NUMBER;

MTRANS NUMBER;

MBONO NUMBER;

MIESS NUMBER;

MMULTAS NUMBER;

MTOTAL NUMBER;

Page 129: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 129 

BEGIN

MCODIGO:=&CODIGO;

SELECT NOMBRE INTO MNOMB FROM SUELDOS

WHERE NUM_EM = MCODIGO;

SELECT NHORAS INTO MNUMHORAS FROM SUELDOS

WHERE NUM_EM = MCODIGO;

SELECT VHORA INTO MVALHORA FROM SUELDOS

WHERE NUM_EM = MCODIGO;

SELECT TRANSPORTE INTO MTRANS FROM SUELDOS

WHERE NUM_EM = MCODIGO;

SELECT BONO INTO MBONO FROM SUELDOS

WHERE NUM_EM = MCODIGO;

SELECT IESS INTO MIESS FROM SUELDOS

WHERE NUM_EM = MCODIGO;

SELECT MULTAS INTO MMULTAS FROM SUELDOS

WHERE NUM_EM = MCODIGO;

MSUELDO:=MNUMHORAS * MVALHORA;

MTOTAL:=MSUELDO+MTRANS+MBONO-MIESS-MMULTAS;

DBMS_OUTPUT.PUT_LINE(MNOMB || ' SU SUELDO A PAGAR ES:'||MTOTAL);

END;

/

EJERCICIO N.- 6

SENTENCIA SELECT

1. SELECCIONAR LOS NOMBRES Y EL RUC DE TODOS LOS PROVEEDORES

SELECT PROVEEDORES.NOM_PROV, PROVEEDORES.RUC_PROV

Page 130: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 130 

FROM PROVEEDORES;

2. SELECCIONAR LOS NOMBRES Y LA DIRECCION DE TODOS LOS

CLIENTES

SELECT CLIENTES.NOM_CLI, CLIENTES.DIR_CLI

FROM CLIENTES;

3. SELECCIONAR TODAS LAS COMPRAS > A 500 DOLARES SELECT TOT_COM FROM COMPRAS WHERE TOT_COM>500;

4. SELECCIONAR TODAS LAS VENTAS DEL 01 AL 30 DE ENERO DEL 2009 SELECT VENTAS.FECHA_VEN FROM VENTAS WHERE FEC_FACT BETWEEN (TO_DATE (‘#01/01/2009#’), TO_DATE (‘#30/01/2009#’,)) ;

5. SELECCIONAR EL NOMBRE DE TODOS LOS PRODUCTOS QUE NO TENGAN EXISTENCIA

SELECT NOMBRE_PRODUCTO FROM PRODUCTO WHERE STOCK=0;

6. SELECCIONAR: EL NOMBRE DEL CLIENTE,EL N:_FACTURA,EL SUBTOTAL,EL DESCUENTO,EL VALOR DEL IVA Y EL TOTAL DE LA FACTURA DE TODAS LAS VENTAS QUE TENGAN DESCUENTOS SELECT CLIENTES.NOMBRE, CLIENTES.APELLIDO,NUMERO_FAC VENTAS.SUB_TOTAL_VENTAS, VENTAS.IVA_VALOR, VENTAS.DESCUENTO_VENTAS, VENTAS.TOTAL_VENTAS FROM VENTAS INNER JOIN CLIENTES ON VENTAS.ID_CLIENTES = CLIENTES.ID_CLIENTES WHERE (VENTAS.DESCUENTO_VENTAS > 0);

7. SELECCIONAR LA FECHA/FACTURA, LA SUMA DE SUBTOTAL, LA SUMA DE DESCUENTOS, LA SUMA DE VALLOR IVA, LA SUMA DE

Page 131: Manual Oracle 9i

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”   MANUAL ORACLE 9i 

 

Sistemas                                            Autor: Diego Sánchez  Página 131 

TOTAL, AGRUPADO X FECHAS, DESDE UNA FECHA INICIAL HASTA UNA FECHA FINAL.  SELECT FECHA_FAC, SUM (SUBTOTAL); SUM (DESC), SUM (IVA).SUM (TOTAL) FROM VENTAS WHERE FEC_FACT BETWEEN (TO_DATE (‘#01/01/2009#’), TO_DATE (‘#31/10/2009#’,)) GROUP BY FECHA_FACT;

8. SELECCIONAR EL NOMBRE DE LOS PRODUCTOS QUE NO SE HAN VENDIDO EN UN RANGO DE FECHAS (DESDE, HASTA)   SELECT DISTINCT PRODUCTO.ID_PRODUCTO, PRODUCTO.NOMBRE_PRODUCTO FROM DETALLE_VENTAS RIGHT OUTER JOIN PRODUCTO ON DETALLE_VENTAS.ID_PRODUCTO = PRODUCTO.ID_PRODUCTO WHERE (DETALLE_VENTAS.ID_PRODUCTO IS NULL);

BIBLOGRAFÍA

http/www/oracle%20trabajo/tablespace0.htm%20esto%20es%20muy%20bien.htm http/www /oracle%20trabajo/tablespaces-en-oracle.htm http/www/oracle%20trabajo/ORACLE%20SQL%20Plus%20%20An%20Introduct

ion%20and%20Tutorial.htm. http/www/ oracle%20trabajo/orarq.html%20%20arquitectura.htm http/www/oracle%20trabajo/Controlar%20espacio%20de%20los%20tablespaces%

20en%20Oracle%20%C2%AB%20Base%20de%20Datos%20y%20Technolog%C3%ADa%20en%20la%20Web.htm