Manual de BDA I

Embed Size (px)

Citation preview

  • 7/23/2019 Manual de BDA I

    1/191

    Base de Datos

    Avanzado I

  • 7/23/2019 Manual de BDA I

    2/191

    2

    CARRERAS PROFESIONALES

    CIBERTEC

  • 7/23/2019 Manual de BDA I

    3/191

    Base de Datos Avanzado I

    3

    CIBERTEC CARRERAS PROFESIONALES

    NDICE

    Presentacin 5Red de contenidos 6

    Unidad de Aprendizaje 1

    SEMANA 1 : Introduccin a una base de datos Oracle 7

    Unidad de Aprendizaje 2

    SEMANA 2 : Creacin de estructuras de datos en una base de datos

    Oracle

    27

    Unidad de Aprendizaje 3

    SEMANA 3 : Sentencias SQL de Manipulacin de Datos y funciones

    predefinidas en una base de datos Oracle

    43

    Unidad de Aprendizaje 4

    SEMANA 4 : Introduccin a Oracle PL/SQL 61

    SEMANA 5 : Sentencias SQL en PL/SQL 75

    SEMANA 6 : Creacin de Estructuras de Control en PL/SQL 87

    SEMANA 7 : Semana de Exmenes Parciales de Teora

    SEMANA 8 : Semana de Exmenes de Parciales Laboratorio

    SEMANA 9 : Construccin de Cursores Explcitos en PL/SQL 95

    SEMANA 10 : Manejo de Excepciones en PL/SQL 111

    Unidad de Aprendizaje 5

    SEMANA 11 : Construccin de procedimientos y funciones

    almacenados en una base de datos Oracle

    123

    SEMANA 12 : Construccin de paquetes en una base de datos Oracle 137

    SEMANA 13 : Disparadores en una base de datos Oracle 145

    Unidad de Aprendizaje 6

    SEMANA 14 : Introduccin a la administracin de una base de datos

    Oracle

    165

    SEMANA 15 : Semana de Exmenes Finales de Laboratorio

    SEMANA 16 : Semana de Exmenes Finales de Teora

    SEMANA 17 : Semana de Sustentacin de Proyectos

  • 7/23/2019 Manual de BDA I

    4/191

    4

    CARRERAS PROFESIONALES

    CIBERTEC

  • 7/23/2019 Manual de BDA I

    5/191

    Base de Datos Avanzado I

    5

    CIBERTEC CARRERAS PROFESIONALES

    PRESENTACIN

    Base de Datos Avanzado I es un curso que pertenece a la lnea formativa y sedicta en las principales carreras de la institucin. El curso brinda un conjunto deherramientas que permiten a los alumnos implementar soluciones en una basede datos Oracle que satisfagan determinadas necesidades de negocio.

    El manual para el curso ha sido diseado bajo la modalidad de unidades deaprendizaje, las que se desarrollan durante semanas determinadas. En cada una

    de ellas, el alumno hallar los logros que debe alcanzar al final de la unidad; eltema tratado, el cual ser ampliamente desarrollado; y los contenidos que debedesarrollar, es decir, los subtemas. Por ltimo, encontrar las actividades quedeber desarrollar en cada sesin que le permitirn reforzar lo aprendido en laclase.

    El curso es eminentemente prctico por lo que consiste en un taller deprogramacin. En primer lugar, se inicia con una introduccin a una base dedatos Oracle, se muestra cmo configurar una conexin remota y se hace unrecorrido por las herramientas bsicas de comunicacin. Contina con la

    creacin de estructuras de datos en una BD Oracle. Posteriormente, se hace unrepaso de las principales sentencias del Lenguaje de Manipulacin de Datos ascomo de las principales funciones predefinidas de Oracle. Luego, se presentan ydesarrollan los conceptos bsicos en programacin PL/SQL. Contina con laprogramacin dentro de una base de datos Oracle a travs de los programasPL/SQL. Se concluye con una introduccin a la administracin de una base dedatos Oracle.

  • 7/23/2019 Manual de BDA I

    6/191

    6

    CARRERAS PROFESIONALES

    CIBERTEC

    RED DE CONTENIDOS

  • 7/23/2019 Manual de BDA I

    7/191

    Base de Datos Avanzado I

    7

    CIBERTEC CARRERAS PROFESIONALES

    INTRODUCCIN A UNA BASE DE DATOS ORACLE

    LOGRO DE LA UNIDAD DE APRENDIZAJE1. Al trmino de la unidad, el alumno ser capaz de configurar una conexin a una

    base de datos ORACLE.

    2. Al trmino de la unidad, el alumno conocer las herramientas bsicas decomunicacin con una base de datos ORACLE.

    TEMARIO

    Introduccin a una base de datos relacional y a la arquitectura Oracle Interactuando con una base de datos Oracle: Conexin y SQL*Plus

    ACTIVIDADES PROPUESTAS

    Recordar el concepto de Modelo Relacional Identificar los principales componente de una base de datos Oracle Configurar conexiones a bases de datos Oracle remotas Interactuar con el SQL*Plus para acceder a una base de datos Oracle

    UNIDAD DE

    APRENDIZAJE

    1SEMANA

    1

  • 7/23/2019 Manual de BDA I

    8/191

    8

    CARRERAS PROFESIONALES

    CIBERTEC

    1. MODELO RELACIONAL

    El modelo relacional para la gestin de una base de datos es un modelo de datosbasado en la lgica de predicado y en la teora de conjuntos. Es el modelo msutilizado en la actualidad para modelar problemas reales y administrar datos

    dinmicamente.En este modelo, todos los datos son almacenados en relaciones y como cadarelacin es un conjunto de datos, el orden en el que estos se almacenen no tienemayor relevancia (a diferencia de otros modelos como el jerrquico y el de red).Esto tiene la considerable ventaja de que es ms fcil de entender y de utilizar porun usuario no experto. La informacin puede ser recuperada o almacenada pormedio de consultas que ofrecen una amplia flexibilidad y poder para administrarla informacin.

    Este modelo considera la base de datos como una coleccin de relaciones. Demanera simple, una relacin representa una tabla que no es ms que un conjuntode filas, cada fila es un conjunto de campos y cada campo representa un valor

    que interpretado describe el mundo real. Cada fila tambin se puede denominartupla o registro y a cada columna tambin se le puede llamar campo o atributo.

    Una tabla es una estructura lgica que sirve para almacenar los datos de unmismo tipo (desde el punto de vista conceptual). Almacenar los datos de unmismo tipo no significa que se almacenen slo datos numricos, o slo datosalfanumricos. Desde el punto de vista conceptual, esto significa que cadaentidad se almacena en estructuras separadas.

    Por ejemplo, la entidad factura se almacena en estructuras diseadas para esetipo de entidad: la tabla FACTURA, la tabla FACTURA_COMPRA, etc. As, cadaentidad, tendr una estructura (tabla) pensada y diseada para ese tipo deentidad. Cada elemento almacenado dentro de la tabla recibe el nombre de

    registro o fila. As, si la tabla FACTURA almacena 1000 facturas, se dice que latabla FACTURA contiene 1000 registros o filas.

    Una tabla son conjuntos de datos del mismo tipo (desde el punto de vista fsico).Ahora, cuando decimos del mismo tipo se desea indicar que los datos de unacolumna son todos del mismo tipo: numricos, alfanumricos, fechas, etc.

    A la vez, tambin, puede existir la relacin entre tablas que tienen un campo oatributo comn. Por ejemplo, la tabla DETALLE que contiene todos los itemscorrespondiente a cada factura de la tabla FACTURA.

  • 7/23/2019 Manual de BDA I

    9/191

    Base de Datos Avanzado I

    9

    CIBERTEC CARRERAS PROFESIONALES

    2. BASE DE DATOS RELACIONAL

    Es un programa residente en memoria que se encarga de gestionar el tratamientode entrada, salida, proteccin y elaboracin de la informacin que almacena.

    Aunque, aparentemente, podamos pensar que una Base de datos es un conjunto

    de solo archivos donde se almacena la informacin, en realidad, eso no es as. Elcorazn de una base de datos es el motor que es el programa que debe estarejecutndose en una mquina para gestionar los datos. Adems de esteprograma y los archivos con datos, existen otras utilidades auxiliares, comoprogramas para realizar copias de seguridad, administracin, etc.

    Oracle es una base de datos relacional para entornos cliente/servidor, es decir,que aplica las normas del lgebra relacional (conjuntos, uniones, intersecciones,etc.) y que utiliza la arquitectura cliente/servidor, donde en un lado de la red estel servidor con los datos y en el otro lado estn los clientes que "interrogan" alservidor.

    2.1. Funciones de la Base de Datos

    Permitir la introduccin de datos por parte del usuario Salida de datos Almacenamiento de datos Proteccin de datos (seguridad e integridad) Elaboracin de datos

  • 7/23/2019 Manual de BDA I

    10/191

    10

    CARRERAS PROFESIONALES

    CIBERTEC

    2.2. Conocimientos Necesarios

    Bsicamente, la relacin del usuario-programador con la base de datos sehace a travs de un lenguaje denominado SQL: Structure Query Language(Lenguaje Estructurado de Consultas).

    Para un programador de base de datos, el conocimiento mnimo debecomprender lo siguiente: Conocimiento bsico de las estructuras internas de Oracle Lenguaje SQL Utilidades bsicas (SQL*PLUS, Export, Import, etc.) Lenguaje de programacin PL/SQL Tareas simples de administracin Tunning (afinamiento) bsico de sentencias SQL

    Las tareas propias de un administrador de bases de datos pueden ser lassiguientes: Los conocimientos propios de un programador de base de datos Conocimiento profundo de las estructuras internas de Oracle Conocimiento profundo de los catlogos Conocer utilitarios de Administracin (Ejemplo: Oracle Enterprise

    Manager) Afinamiento avanzado de SQL, red, memoria, discos, CPU, etc.

    2.3. Componentes bsicos de una base de datos Oracle

    Motor: Programa ejecutable que debe estar en memoria para manejar labase de Datos. Cuando este programa est ejecutndose se dice que laBase de datos est levantada.

    Servicio de red: Programa que se encarga de establecer las conexionesy transmitir datos entre cliente y servidor o entre servidores. En Oracle esel protocolo Net8.

    Listener(Escuchador): Programa residente en memoria que se encargade recibir las llamadas que llegan a la base de datos desde la red y depasrselas a sta. Una base de datos que no tenga un listener cargado,no podr recibir llamadas remotas. El listener se comunica con el serviciode red.

    Utilitarios: Intrpretes de consultas, Programas de Administracin debase de datos, Programas de copia de seguridad, monitores derendimiento.

    A todo este conjunto se le llama RDBMS: Relational Database Manager

    System Sistema de Gestin de Base de Datos Relacionales.

  • 7/23/2019 Manual de BDA I

    11/191

    Base de Datos Avanzado I

    11

    CIBERTEC CARRERAS PROFESIONALES

    3. LENGUAJE SQL

    El lenguaje estructurado de consultas es un conjunto de sentencias u rdenes quetodos los programas y usuarios deben utilizar para acceder a bases de datosOracle. No hay otra manera de comunicarse con Oracle si no a travs de SQL.

    Dado que SQL es un estndar, todas las bases de datos comerciales actualesutilizan SQL como puente de comunicacin entre la base de datos y el usuario.

    En realidad, SQL no es un lenguaje en s, como podra ser un lenguaje deprogramacin de 3ra generacin (C, Pascal, etc.), sino que es un sublenguajeorientado a acceso y manipulacin de bases de datos relacionales.

    Se dice que SQL es estructurado porque trabaja con conjuntos de resultados(result set) abstractos como unidades completas.

    Un conjunto de resultados es un esquema bsico de una tabla: M Filas x Ncolumnas. Este esquema se trata como un todo y es la idea principal de SQL.

    Lo anterior es aplicable tambin cuando existe ms de una tabla en un mismoSQL, el conjunto de resultados sigue siendo el resultado de una matriz de M Filasx N columnas, el cual puede ser filtrado (reducido) usando la muy conocidaclusula WHERE.

    4. LENGUAJE PL/SQL

    Ya se mencin anteriormente que SQL es un lenguaje de comandos, no unlenguaje de programacin con todas las estructuras de control tpicas. As, SQL,slo contempla instrucciones, ms o menos simples, pero no tiene ningn tipo deinstrucciones de control de flujo o de otro tipo ms propias de los lenguajes deprogramacin de tercera generacin (3GL).

    Para subsanar esta carencia, Oracle defini un lenguaje de programacin detercera generacin, que admita sentencias SQL embebidas en su propiolenguaje. Este es el PL/ SQL (Procedural Language o Programming language).

    La idea bsica sobre la que se sustenta el PL/SQL es aplicar las estructurastpicas de un lenguaje de programacin (bifurcaciones, bucles, funciones, etc) alas sentencias SQL tpicas.

  • 7/23/2019 Manual de BDA I

    12/191

    12

    CARRERAS PROFESIONALES

    CIBERTEC

    5. CONFIGURACIN DE UN CLIENTE ORACLE

    En Oracle, esto se llama creacin de un nombre de servicio de red o una cadenade conexin o un connect string o host string. Esto se hace despus de haberinstalado el software Oracle Cliente. Si se ha instalado el Oracle Server,

    implcitamente, se tiene instalado tambin el Cliente Oracle.Existen dos formas para crear un nombre de servicio de red en Oracle: manual omediante el uso de un asistente. En este curso, slo nos centraremos en crear unnuevo nombre de servicio de red local mediante el uso del asistente (asistente deconfiguracin de red), para ver ms detalles respecto a la conexin yconfiguracin de redes consulte el manual del administrador Networking.

    5.1. Asistente de Configuracin de Red (NET Configuration Assistant)

    Estos son los pasos que debe seguir para establecer una conexin a la base dedatos a travs del asistente:

    Ejecutando el asistente: En el grfico, se muestra la ubicacin del acceso directoal asistente.

    Pantalla principal o bienvenida: En esta pantalla, elegimos el tipo deconfiguracin de red que vamos a realizar. Para nuestro caso, elegimos latercera opcin (configuracin del nombre del servicio de red local).En el grfico,se muestra la ubicacin del acceso directo al asistente.

  • 7/23/2019 Manual de BDA I

    13/191

    Base de Datos Avanzado I

    13

    CIBERTEC CARRERAS PROFESIONALES

    Configuracin del Nombre del Servicio de Red: Cuando se instala elsoftware de Oracle, se crea el archivo TNSNAMES.ORA con algunos nombresde servicio de red de ejemplo que pueden ser utilizados como plantillas. Elasistente realiza los cambios en el archivo TNSNAMES.ORA como agregar unnuevo nombre de servicio de red, eliminar uno existente, renombrar un serviciode red o modificar los parmetros de un descriptivo. Los cambios hechos en elarchivo TNSNAMES.ORA son realizados si el test de conexin es satisfactorio.Para nuestro caso, elegimos agregar para insertar un nuevo nombre de servicioen el archivo TNSNAMES.ORA. Usted podr encontrar el archivoTNSNAMES.ORA dentro del directorio del gestor de la base de datos:../ora90/netware/admin.

    Seleccionar versin de la base de datos a acceder:Desde aqu se indica sila cadena de conexin va acceder a una base de datos versin igual, superioro inferior al oracle8i. En oracle8i se utiliza SQL *NET para establecer unaconexin con la base de datos. La versin de este software difiere de Oracle8.0 y Oracle 8i. Usted no puede utilizar la versin del SQL *NET de Oracle 8.0

    para conectarse a Oracle 9i, necesita la versin del oracle8i.

  • 7/23/2019 Manual de BDA I

    14/191

    14

    CARRERAS PROFESIONALES

    CIBERTEC

    Ingreso del nombre de la base de datos a acceder: Aqu se ingresa elnombre de la base de datos remota a la cual se desea acceder.

    .

    Seleccionar el protocolo de red

    Parmetro de conexin a travs del Protocolo TCP:Cada protocolo de rednecesita de ciertos parmetros de conexin. En la pantalla anterior,seleccionamos el protocolo TCP como el protocolo de comunicacin. Esteprotocolo necesita del nombre de Host y de un puerto de comunicacin que,por estndar, es el 1521.

  • 7/23/2019 Manual de BDA I

    15/191

    Base de Datos Avanzado I

    15

    CIBERTEC CARRERAS PROFESIONALES

    Test de conexin:Antes de registrar los datos al archivo TNSNAMESORA atravs del asistente, debemos realizar una prueba de conexin para as probarsi los parmetros ingresados son los correctos o si hay algn otro problema deconexin.

    El asistente siempre utiliza al usuario SCOTT para realizar las pruebas deconexin. Si SCOTT no existiese, elija a otro usuario para realizar las pruebasde conexin, haga un clic en el botn Cambiar conexin para cambiar deusuario.

  • 7/23/2019 Manual de BDA I

    16/191

    16

    CARRERAS PROFESIONALES

    CIBERTEC

    sta sera la vista del archivo TNSNAMES.ORA. despus de agregar el nuevonombre de servicio CIBERTEC:

    Muchas veces, si se desea crear otro Servicio de Red, se acostumbra irdirectamente al archivo TNSNAMES.ORA, copiar una de las entradas,renombrarla y cambiar los datos necesarios.

    Por ejemplo, si se desea agregar un nuevo servicio de red, para que se pueda

    conectar a una base de datos llamada cibertecx (en el campoSERVICE_NAME), que reside en el servidor server_cibertec ( en el campoHOST ), se configurara de la siguiente manera:

    # TNSNAMES.ORA Network Configuration File: E:\oracle\ora92\network\admin\tnsnames.ora# Generated by Oracle configuration tools.

    CIBERTEC = (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = ca307-serv)(PORT = 1521)) )

    (CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = cibertec) )

    )

    INST1_HTTP = (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = server)(PORT = 1521)) )

    (CONNECT_DATA =(SERVER = SHARED)(SERVICE_NAME = MODOSE)(PRESENTATION = http://HRService) )

    )

    EXTPROC_CONNECTION_DATA =(DESCRIPTION =

    (ADDRESS_LIST =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) )(CONNECT_DATA =(SID = PLSExtProc)(PRESENTATION = RO) )

    )

    CIBERTECX = (DESCRIPTION = (ADDRESS_LIST =

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

    (CONNECT_DATA =

    (SERVER = DEDICATED)

    (SERVICE_NAME = cibertecx) )

    )

  • 7/23/2019 Manual de BDA I

    17/191

    Base de Datos Avanzado I

    17

    CIBERTEC CARRERAS PROFESIONALES

    6. SQL *PLUS

    SQL *PLUS, es una herramienta indispensable para un administrador de base dedatos.Es un entorno en modo texto y no contiene un motor PL/SQL local, es decir, lasinstrucciones o comandos se envan directamente a la base de datos.

    SQL *PLUS quizs sea la ms sencilla de las herramientas de desarrollo dePL/SQL. Permite al usuario introducir instrucciones SQL y bloques PL/SQL deforma interactiva mediante una lnea de comandos.

    Generalmente, SQL *PLUS se distribuye junto con el servidor de Oracle y seencuentra disponible como parte de la instalacin estndar de Oracle.Dado que SQL *PLUS es un tema tan amplio, que no se puede estudiar en unasola sesin de clases, se van a estudiar principalmente las funciones queinteresan a los DBA (database administrator).

    6.1. Entorno del SQL *PLUS

    Existen dos entornos del SQL *PLUS, el entorno orientado al carcter y el entornoWindows que incluyen operaciones GUI, especialmente, para establecer laconexin a la base de datos y configurar las diferentes opciones del SQL *PLUS.

    En el sistema operativo Windows, Ud. siempre encontrara ambas aplicaciones enla siguiente ruta: unidad:/carpeta_de_instalacion/ ora90/bin/. El nombre del archivoaplicacin para el entorno Windows es SQLPLUSW.EXE y para el entornoorientado al carcter se llama SQLPLUS.EXE. Queda a criterio del alumno el usode cualquiera de los dos entornos SQL *PLUS.

    6.2. Conexin con la Base de Datos

    Antes de realizar cualquier instruccin en la base de datos, es necesarioestablecer una conexin con el servidor de datos. Esta operacin se puederealizar de una de las siguientes formas:

    Mediante el paso de un identificador de usuario y una contrasea y/o unacadena de conexin en la lnea de comandos utilizada para iniciar SQL *PLUSpara el entorno orientado al carcter.

    Una primera forma sera despus de ejecutar el SQL *PLUS desde el exploradorde Windows (/ORA90/BIN/SQLPLUS.EXE):

  • 7/23/2019 Manual de BDA I

    18/191

    18

    CARRERAS PROFESIONALES

    CIBERTEC

    O tambin especificando la cadena de conexin:

    Una segunda forma sera iniciando el SQL *PLUS desde el men ejecutar del botnde inicio:

    Mediante el uso del cuadro de dilogo LOG ON, para iniciar el SQL*PLUSpara Windows. Aqu especifican un usuario, la contrasea y,opcionalmente, la cadena de conexin.

    SQL *PLUS Release 9.0.1.0.1 Production on Mar Mar 25 14:05:55

    2003 Copyright 2001 Oracle Corporation. All rights reserved.

    Introduzca el nombre de usuario:SCOTTIntroduzca la contrasena:TIGERConectado a:

    Oracle9i Enterprise Edition Release 9.0.1.1.1 Production with the

    partitioning option Jserver Release 9.0.1.1.1 Production

    SQL *PLUS Release 9.0.1.0.1 Production on Mar Mar 25 14:05:55 2003

    Copyright 2001 Oracle Corporation. All rights reserved.

    Introduzca el nombre de usuario:SCOTT/TIGER@CIBERTEC

    Conectado a:Oracle9i Enterprise Edition Release 9.0.1.1.1 Production with the

  • 7/23/2019 Manual de BDA I

    19/191

    Base de Datos Avanzado I

    19

    CIBERTEC CARRERAS PROFESIONALES

    Mediante el uso del comando CONNECT, una vez dentro de SQL*PLUS(en ambos entornos).

    6.3. Comandos de configuracin de sesin

    Existe un grupo de comandos que nos permiten configurar el SQL *PLUS mientrasestamos conectados a la base de datos. Algunos de los comandos se muestranen la siguiente tabla:

    Por ejemplo, el comando LINESIZE nos permite determinar cuntos caracteres semostrarn por cada lnea de texto que devuelven las consultas a la base de datos.La cantidad por defecto es 80 caracteres. Para poner en prctica el efecto delcomando, hagamos la siguiente consulta:

    SQL> CONNECT

    Introduzca el nombre de usuario: SCOTT

    Introduzca la contrasena: *****

    Conectado.

    SQL>

  • 7/23/2019 Manual de BDA I

    20/191

    20

    CARRERAS PROFESIONALES

    CIBERTEC

    ...sta ser la salida por pantalla. Ahora, si aumentamos la cantidad de caracterespor lnea de texto, el resultado de la consulta se mostrara ms ordenado.

    6.4. Uso del editor de sistema operativo en SQL PLUS

    Como ya se ha dado cuenta, las capacidades de edicin que ofrece SQL *PLUSson escasas y poco intuitivas en comparacin con otros editores de texto. (Porejemplo, no se pueden utilizar las teclas de flecha, inicio y fin). Por tanto, SQL*PLUS nos da la posibilidad de trabajar con el editor de su sistema operativo enlugar de utilizar las capacidades de edicin de SQL *PLUS. Esto es posibleutilizando el comando EDIT dentro del SQL *PLUS.

    La sintaxis del comando EDIT es:EDIT [nombre_archivo[.extension]]

    Ejemplo:

    SQL> EDIT

    Se observa que, inmediatamente, se abre un archivo llamado AFIEDT.BUF (pordefecto) en el block de notas y por defecto muestra la lnea de texto actual (ltimo

    comando SQL o bloque PL/SQL emitido). Si no se ha ejecutado ningn comandoSQL o bloque PL/SQL entonces aparecer el siguiente mensaje:

    SQL> EDITSP2-0107: Nada que guardar.

    Esto es normal si el buffer est vaco. Este buffer slo almacena uno y solamenteel ltimo comando emitido. No podemos ingresar ms de un comando desde eleditor de Windows.

  • 7/23/2019 Manual de BDA I

    21/191

    Base de Datos Avanzado I

    21

    CIBERTEC CARRERAS PROFESIONALES

    Tiene que cerrar el editor de Windows para volver a tener control de la ventana delSQL *PLUS.

    Grabe sus cambios para que estos se carguen al buffer del SQL *PLUS y puedaejecutar con el carcter /. Ejemplo:

    SQL>/

    Cambiando el nombre del archivo AFIEDT.BUF

    El nombre del archivo por defecto (AFIEDT.BUF) lo podemos cambiar por unnombre que nos parezca ms fcil de utilizar y recordar. Como por ejemplo:

    SQL> SET EDITFILE comandos.sql

    SQL> EDIT

    -- ejecutando el contenido del bufferSQL> /

    Ejecutando archivos de comandos desde SQL *PLUS

    Para ejecutar archivos que contengan comandos vlidos, se utiliza el comandoSTART o el carcter @. Ejemplo:

    SQL> START @unidad:\ruta\mi_archivo;

    o tambin:

    SQL> @unidad:\ruta\mi_archivo ;

    La extensin del archivo por defecto es .sql. Podemos utilizar archivos conextensin diferente al por defecto (cualquier archivo que pueda ser ledo con uneditor de texto) pero debemos especificar la extensin en el comando deejecucin. Por ejemplo, para ejecutar un archivo con extensin .txt: este sera elcomando:

    SQL> @unidad:\ruta\mi_archivo.txt;

    Hagamos el siguiente caso prctico. Vamos crear un archivo llamadocomandos.txt utilizando el editor de Windows.

  • 7/23/2019 Manual de BDA I

    22/191

    22

    CARRERAS PROFESIONALES

    CIBERTEC

    SQL> EDIT

    Editamos el buffer (comandos.sql) ingresando los siguientes comandos SQL:

    SELECT * FROM emp WHERE rownum START comandos.txt o tambin SQL> @comandos.txt

    Observe que no se ha especificado ninguna ruta de acceso al archivocomandos.txt que hemos utilizado. Por defecto, si no se especifica la ruta delarchivo, el SQL *PLUS crea y busca los archivos en la carpeta .../ORA90/ BIN/. Sies que usted no ha modificado esta ruta por defecto.

    Para modificar la ruta por defecto siga los siguientes pasos:

    Primero:Creamos una carpeta de trabajo en la ruta y con el nombre quecrean conveniente hacerlo. Por ejemplo: c:\LP6\

    Segundo:Editemos las propiedades del acceso directo al archivo

  • 7/23/2019 Manual de BDA I

    23/191

    Base de Datos Avanzado I

    23

    CIBERTEC CARRERAS PROFESIONALES

    SQLPLUSW.EXE. Solamente cambiemos la ruta que aparece en lapropiedad: INICIAR EN por la ruta de la carpeta de trabajo que hemoscreado: C:\LP6\ ... y listo aceptamos los cambios.

    Tercero:Para que los cambios tengan efecto, tiene que volver a iniciar elSQL*PLUS.

    Este cambio realizado al acceso directo slo afecta a este archivo. El resto deaccesos directos al ejecutable del SQL *PLUS siempre tendrn como ruta por

    defecto, la carpeta .../ORA90/BIN/.

    Para volver a editar el contenido del archivo comandos.txt, utilicemos el comandoEDIT nuevamente:

    -- volviendo a abrir el archivo comandos.txt

    SQL> EDIT comandos.txt

    Si no especifica el nombre del archivo a editar, el SQL *PLUS mostrar elcontenido del buffer en el editor de Windows.

  • 7/23/2019 Manual de BDA I

    24/191

    24

    CARRERAS PROFESIONALES

    CIBERTEC

    Si ha creado carpetas cuyo nombre tengan espacio en blanco o el nombre delarchivo tambin tenga espacios en blanco, debe encerrar en apstrofes el archivoa ejecutar. Ejemplo:

    SQL> @c:\curso lp6\mis comandos.txt ;

    6.5. Uso comando SPOOL en SQL *PLUS

    Este comando es de gran utilidad para un operador del SQL *PLUS. Pues estecomando permite registrar, en un archivo especificado, los resultados de nuestrasconsultas y operaciones realizadas en la base de datos. No solamente registra losresultados sino que tambin registra los comandos utilizados. La sintaxis es lasiguiente:

    SPOOL [nombre_archivo[.extension]]

    Ejemplo: los siguientes comandos sern registrados en el archivo sesion02.txt cuando se cierre el spool a travs del comando SPOOL OFF

    Cuando se crea el archivo session02.txt, este se mantendr abierto y vaco, hastaque no se especifique que se cierre el spool (SPOOL OFF). Si usted no especificala extensin al archivo a travs del comando SPOOL automticamente el archivose le asignar la extensin LST.

    Si editamos el archivo sesion02.txt creado con el comando spool encontraremos losiguiente:

    SQL> EDIT sesion02.txt

  • 7/23/2019 Manual de BDA I

    25/191

    Base de Datos Avanzado I

    25

    CIBERTEC CARRERAS PROFESIONALES

    Si usted vuelve a crear el archivo sesion02.txt con el comando SPOOL, paranuestro caso el archivo ya existe, lgicamente el archivo se volver a crear

    perdindose el contenido del mismo. Tenga cuidado al especificar el nombre delarchivo. Asegrese de que el archivo a crear no exista.

    Por ejemplo, este comando volver a crear el archivo sesion02.txt y se perdernuestro registro de comandos realizados anteriormente.

    SQL> SPOOL sesion02.txt

  • 7/23/2019 Manual de BDA I

    26/191

    26

    CARRERAS PROFESIONALES

    CIBERTEC

    Resumen

    Una base de datos es un programa residente en memoria, que se encarga degestionar el tratamiento de entrada, salida, proteccin y elaboracin de lainformacin que almacena.

    El Lenguaje SQL (Lenguaje Estructurado de Consultas) es un conjunto desentencias que permiten a los usuarios y programas acceder a la informacincontenida en una base de datos.

    El Lenguaje PL/SQL es un lenguaje de programacin que permite sentencias SQLembebidas y el uso de caractersticas propias de un lenguaje de programacin de

    tercera generacin como uso de variables, estructuras del control, bucles, etc.Todos los programas que residen en una base de datos Oracle son desarrolladoscon este lenguaje.

    En el archivo TNSNAMES.ora se encuentran los datos de todas las bases de datosOracle remotas a las cuales podemos acceder.

    El SQL PLUS es la herramienta bsica de comunicacin con una base de datosOracle.

  • 7/23/2019 Manual de BDA I

    27/191

    Base de Datos Avanzado I

    27

    CIBERTEC CARRERAS PROFESIONALES

    CREACIN DE ESTRUCTURAS DE DATOS DENTRO DEUNA BASE DE DATOS ORACLE

    LOGRO DE LA UNIDAD DE APRENDIZAJE

    1. Al trmino de la unidad, los alumnos podrn crear y mantener los objetos yestructuras de datos ms comunes en una base de datos ORACLE.

    TEMARIO

    Creacin y modificacin de tablas en una base de datos Oracle Creacin de restricciones, secuencias y sinnimos en una base de datos Oracle

    ACTIVIDADES PROPUESTAS

    Los alumnos crearn y modificarn tablas en una base de datos Oracle. Los alumnos crearn restricciones en una base de datos Oracle. Los alumnos crearn secuencias en una base de datos Oracle. Los alumnos crearn sinnimos en una base de datos Oracle.

    UNIDAD DE

    APRENDIZAJE

    2

    SEMANA

    2

  • 7/23/2019 Manual de BDA I

    28/191

    28

    CARRERAS PROFESIONALES

    CIBERTEC

    1. Manejo de Tablas

    Para que un usuario de Base de Datos pueda crear una tabla debe tener lossiguientes privilegios:

    Para crear una nueva tabla en el esquema del usuario, se debe contar con

    el privilegio de sistema CREATE TABLE. Para crear una nueva tabla en otro esquema de usuario, se debe contar con

    el privilegio de sistema CREATE ANY TABLE.

    Creando Tablas

    Antes de crear una tabla debemos de determinar a que esquema de la base dedatos pertenecer. Para poner esto en prctica, vamos a crear en la base de datosun espacio para las tablas (Tablespace) llamado TS_DATA y, tambin, vamos acrear un usuario llamado DESARROLLO que utilizaremos para crear todos losobjetos a ver en esta sesin.

    -- Conctese con una cuenta que tenga los privilegios suficientes para creartablespaces y nuevos usuarios.

    SQL>CONN system/cibertec@cibertec

    -- Cree el espacio de tablas ts_data, para almacenar en esta parte o porcin de labase de datos la data de las tablas a crear.

    SQL> CREATE TABLESPACE TS_DATADatafile C:\oracle\oradata\df_data01.dbf SIZE 50M reuseDefault Storage ( initial 8k

    Next 8k

    Minextents 1Maxextents unlimitedPctincrease 0 )

    -- Cree el usuario o esquema Desarrollo, especificando qu tablespace va a utilizary cunta informacin podr almacenar. (Consultar la vista user_tablespaces paraver la informacin de los tablespaces creados en la base de datos).

    SQL> CREATE USER DESARROLLOIDENTIFIED BY DESARROLLODEFAULT TABLESPACE TS_DATATEMPORARY TABLESPACE TEMPQUOTA UNLIMITED ON TS_DATA

    QUOTA UNLIMITED ON TEMP;

  • 7/23/2019 Manual de BDA I

    29/191

    Base de Datos Avanzado I

    29

    CIBERTEC CARRERAS PROFESIONALES

    -- Otorgue los privilegios necesarios para el usuario Desarrollo con el fin de queefecte la conexin y pueda crear tablas en su esquema o en el esquema de otrosusuarios de la base de datos..

    SQL> GRANT CONNECT TO DESARROLLO;

    SQL> GRANT CREATE ANY TABLE TO DESARROLLO;

    Luego de crear el tablespace TS_DATA y el esquema DESARROLLO, crearemoslas tablas EMP y DEPT en el esquema DESARROLLO dentro del tablespaceTS_DATA.

    -- Conctese con el usuario Desarrollo.

    SQL>CONN desarrollo/desarrollo@cibertec

    -- Cree las tablas Emp y Dep. para el esquema Desarrollo.

    SQL> CREATE TABLE Emp (

    Empno NUMBER(4) not null,Ename VARCHAR2(20) not null,Job VARCHAR2(15),Mgr NUMBER(4),Hiredate DATE default sysdate not Null,Sal NUMBER(7,2) check(sal>=0),Comm NUMBER(7,2) check(comm>=0),Deptno NUMBER(2) not null)Tablespace TS_DATA;

    SQL> CREATE TABLE Dept (Deptno NUMBER(2) not null)Dname VARCHAR2(14) not null,

    Local VARCHAR2(13) )Tablespace TS_DATA;

    Para consultar la informacin de las tablas que hemos creado se puede acceder ala vista del diccionario de datos USER_TABLES.

    Comentando Tablas y ColumnasUsted puede agregar comentarios a las tablas y a sus columnas utilizando elcomando COMMENT ON.

    Por ejemplo, el siguiente comando comenta la tabla EMP:

    SQL> COMMENT ON TABLE Emp IS Tabla de Empleados;

    Por ejemplo, los siguientes comandos comentan algunas de las columnas de latabla EMP:

    SQL> COMMENT ON COLUMN Emp.Empno IS Cdigo de Empleado;

    SQL> COMMENT ON COLUMN Emp.Ename IS Nombre de Empleado;

    SQL> COMMENT ON COLUMN Emp.Hiredate IS Fecha de Ingreso;

  • 7/23/2019 Manual de BDA I

    30/191

    30

    CARRERAS PROFESIONALES

    CIBERTEC

    Alterando Tablas

    El comando utilizado para alterar una tabla es ALTER TABLE. Para alterar unatabla, sta debe estar contenida en el esquema del usuario o debe tener elprivilegio de sistema ALTER ANY TABLE.

    Las siguientes son las principales razones para alterar o modificar una tabla:

    Para adicionar, eliminar o renombrar columnas, o modificar la definicin deuna columna existente (tipo de dato, longitud, valores por defecto yconstraints de integridad).

    Para modificar los atributos lgicos o fsicos de una tabla. Para adicionar, modificar o eliminar constraints asociados con la tabla. Habilitar o deshabilitar los constraints de integridad o disparadores

    asociados con la tabla. Para renombrar la tabla. Para renombrar las columnas de la tabla.

    Adicionando Columnas

    Para adicionar una columna a una tabla, utilice el comando ALTER TABLE ..ADD.

    Por ejemplo, el siguiente comando adiciona una nueva columna llamada Bonus ala tabla EMP:

    SQL> ALTER TABLE Emp ADD Bonus NUMBER(12,2) CHECK (Bonus>=0);

    El siguiente ejemplo adiciona ms de una columna:

    SQL> ALTER TABLE Emp ADD (Direccin Date, Telefono Char(9));

    Modificando Columnas

    Para modificar la definicin de una columna existente, utilice el comando ALTERTABLE .. MODIFY. Usted puede modificar un tipo de dato de la columna, unvalor por defecto, o un constraints. Tambin puede aumentar o disminuir la longitudde la columna.

    Por ejemplo, el siguiente comando disminuye la longitud de la columna Bonus dela tabla EMP:

    SQL> ALTER TABLE Emp MODIFY Bonus NUMBER(9,2);

    Renombrando ColumnasPara renombrar una columna existente, utilice el comando ALTER TABLE ..RENAME COLUMN. El nuevo nombre no debe tener conflicto con el nombre de

    una columna existente.

    Por ejemplo, el siguiente comando renombra la columna Bonus de la tabla EMP:

    SQL> ALTER TABLE Emp RENAME COLUMN Bonus TO Bono_Emp;

    El comando puede ser cancelado si la columna tiene objetos dependientes.

  • 7/23/2019 Manual de BDA I

    31/191

    Base de Datos Avanzado I

    31

    CIBERTEC CARRERAS PROFESIONALES

    Eliminando ColumnasPara eliminar una columna de una tabla, utilice el comando ALTER TABLE ..DROP COLUMN..

    Por ejemplo, el siguiente comando elimina la columna Telfono de la tabla EMP:

    SQL> ALTER TABLE Emp DROP COLUMN Telefono;

    Eliminando Tablas

    El comando utilizado para eliminar una tabla es DROP TABLE. Para eliminar unatabla de cualquier esquema se debe tener el privilegio de sistema DROP ANYTABLE.

    Por ejemplo, el siguiente comando elimina la tabla Emp del esquema de desarrollo:

    SQL> DROP TABLE Emp;

    Si la tabla a eliminar est referenciada por otra tabla a travs de una llave fornea,usted no podr eliminarla con el comando anterior, usted tiene que adicionar laclusula CASCADE CONSTRAINT al comando DROP TABLE para forzar laeliminacin de la tabla.

    Por ejemplo, el siguiente comando elimina la tabla EMP del esquema SCOTT juntocon la llave primaria y las forneas que hacen referencia (constraints).

    SQL> DROP TABLE scott.Emp CASCADE CONSTRAINTS;

    Manejando Constraints de Integridad

    Los constraints de integridad son reglas que restringen los valores de uno o mscolumnas en una tabla. La clusula CONSTRAINTS puede utilizarse en loscomandos CREATE TABLE o ALTER TABLE.

    Creando llaves primariasUsted puede crear la llave primaria de una tabla durante la creacin con elcomando CREATE TABLE o adicionarla despus de haber creado la tabla con elcomando ALTER TABLE.

    Los siguientes ejemplos crean una llave primaria a travs del comando CREATETABLE:

    -- Ejemplo 1: Compuesta de una columna y sin indicar el nombre explcitamente.

    SQL> CREATE TABLE Ord (Ordid NUMBER(4) primary key,Orderdate DATE,Commplan CHAR(1),Custid NUMBER(6) not null,Shipdate DATE,Total NUMBER(8,2))Tablespace TS_DATA;

  • 7/23/2019 Manual de BDA I

    32/191

    32

    CARRERAS PROFESIONALES

    CIBERTEC

    -- Ejemplo 2: Compuesta de una columna e indicando el nombre explcitamente.

    SQL> CREATE TABLE Ord (Ordid NUMBER(4) constraints pk_ord primary key,Orderdate DATE,Commplan CHAR(1),Custid NUMBER(6) not null,

    Shipdate DATE,Total NUMBER(8,2))Tablespace TS_DATA;

    Los siguientes ejemplos crean una llave primaria a travs del comando ALTERTABLE:

    -- Ejemplo 1: Compuesta de una columna sin nombre explcito.

    SQL> ALTER TABLE ORD ADD PRIMARY KEY (ordid);

    -- Ejemplo 2: Compuesta de una columna con nombre explcito.

    SQL> ALTER TABLE ORD ADD constraint pk_ord PRIMARY KEY (ordid);

    -- Ejemplo 3: Compuesta por ms de una columna con nombre explicito.

    SQL> ALTER TABLE ITEM ADD constraint pk_item PRIMARY KEY (ordid,itemid);

    Creando llaves forneasPuede crear llaves forneas haciendo referencia a las tablas de su esquema. Parapoder referenciar tablas de otros esquemas de usuarios, debe contar con elprivilegio REFERENCES sobre la tabla a referenciar.Usted puede crear la llave fornea de una tabla durante la creacin con el

    comando CREATE TABLE o adicionarla despus de haber creado la tabla con elcomando ALTER TABLE.

    Los siguientes ejemplos crean una llave fornea a travs del comando CREATETABLE:

    -- Ejemplo 1: Sin nombre explicito.

    SQL> CREATE TABLE Item (Ordid NUMBER(4) REFERENCES Ord,Itemid NUMBER(4) not null,Prodid NUMBER(6),Actualprice NUMBER(8,2),

    Cantidad NUMBER(8),Itemtot NUMBER(8,2),CONSTRAINTS pk_item primary key (ordid, itemid))Tablespace TS_DATA;

  • 7/23/2019 Manual de BDA I

    33/191

    Base de Datos Avanzado I

    33

    CIBERTEC CARRERAS PROFESIONALES

    -- Ejemplo 2: Con nombre explicito.

    SQL> CREATE TABLE Item (Ordid NUMBER(4),Itemid NUMBER(4) not null,Prodid NUMBER(6),Actualprice NUMBER(8,2),

    Cantidad NUMBER(8),Itemtot NUMBER(8,2),CONSTRAINTS pk_item primary key (ordid, itemid),CONSTRAINTS fk_item foreign key (ordid) references ord(ordid) )Tablespace TS_DATA;

    Los siguientes ejemplos crean una llave fornea a travs del comando ALTERTABLE:

    -- Ejemplo 1: Sin nombre explicito.

    SQL> ALTER TABLE ITEM ADD FOREIGN KEY (ordid) REFERENCESOrd(ordid);

    -- Ejemplo 2: Con nombre explicito.

    SQL> ALTER TABLE ITEMADD CONSTRAINTS fk_itemFOREIGN KEY (ordid) REFERENCES Ord(ordid);

    Creando CheckLas restricciones CHECK es una regla de validacin a nivel de columna. Estarestriccin se define durante la creacin de la tabla con el comando CREATETABLE o adicionarla despus de haber creado la tabla con el comando ALTERTABLE.

    Los siguientes ejemplos crean una restriccin CHECK a travs del comandoCREATE TABLE:

    -- Ejemplo 1:.SQL> CREATE TABLE Item (

    Ordid NUMBER(4),Itemid NUMBER(4) not null,Prodid NUMBER(6),Actualprice NUMBER(8,2) CONSTRAINTS ck_item_01

    CHECK (actualprice >= 0),Cantidad NUMBER(8) CONSTRAINTS ck_item_02

    CHECK (cantidad >= 0),Itemtot NUMBER(8,2) CONSTRAINTS ck_item_02

    CHECK (itemtot >= 0),CONSTRAINTS pk_item primary key (ordid, itemid),CONSTRAINTS fk_item foreign key (ordid) references ord(ordid) )Tablespace TS_DATA;

  • 7/23/2019 Manual de BDA I

    34/191

    34

    CARRERAS PROFESIONALES

    CIBERTEC

    Los siguientes ejemplos crean una restriccin CHECK a travs del comandoALTER TABLE:

    -- Ejemplo 1:.

    SQL> ALTER TABLE ITEMADD CONSTRAINTS ck_item_01 CHECK (actualprice >=0);

    -- Ejemplo 2:.

    SQL> ALTER TABLE ITEMADD ( CONSTRAINTS ck_item_02 CHECK (cantidad >=0),CONSTRAINTS ck_item_03 CHECK (itemtot >=0);

    Estableciendo valores por defectoUtilice el comando DEFAULT con el comando CREATE TABLE o con el comandoALTER TABLE para especificar un valor por defecto.

    Los siguientes ejemplos crean esta restriccin a travs del comando CREATETABLE:

    -- Ejemplo 1:.

    SQL> CREATE TABLE Errores (Id_error NUMBER(4),descrip VARCHAR2(50),Usuario CHAR(10) DEFAULT user,Fecha DATE DEFAULT sysdate,Hora CHAR(8) DEFAULT to_char(sysdate,hh24:mi:ss),estacion VARCHAR2(20) DEFAULT USERENV(terminal) )Tablespace TS_DATA;

    Los siguientes ejemplos crean esta restriccin a travs del comando ALTER

    TABLE:

    -- Ejemplo 1:.

    SQL> ALTER TABLE errores MODIFY ( Usuario DEFAULT user);

    -- Ejemplo 2:.

    SQL> ALTER TABLE errores MODIFY ( Fecha DEFAULT sysdate,Hora DEFAULT to_char(sysdate,hh24:mi:ss),estacion DEFAULT USERENV(terminal));

  • 7/23/2019 Manual de BDA I

    35/191

    Base de Datos Avanzado I

    35

    CIBERTEC CARRERAS PROFESIONALES

    Habilitando y Deshabilitando ConstraintsUsted puede habilitar o deshabilitar cualquier constraint de su esquema. Paramodificar un constraint de otro esquema de usuario debe tener el privilegio ALTERsobre el objeto tabla.

    Por ejemplo, el siguiente comando deshabilita la llave primaria de la tabla ORD:

    -- Ejemplo 1:.

    SQL> ALTER TABLE Scott.Ord DISABLE PRIMARY KEY;

    -- Ejemplo 2:.

    SQL> ALTER TABLE Scott.Ord ENABLE CONSTRAINTS pk_ord;

    Por ejemplo, el siguiente comando deshabilita la llave fornea de la tabla ITEM:

    -- Ejemplo 1:.

    SQL> ALTER TABLE Desarrollo.Item DISABLE FOREIGN KEY;

    -- Ejemplo 2:.

    SQL> ALTER TABLE Desarrollo.Item DISABLE CONSTRAINTS fk_item;

    Eliminando ConstraintsUsted puede un constraint utilizando el comando ALTER TABLE con una de lassiguientes clusulas:

    DROP PRIMARY KEY DROP UNIQUE DROP CONSTRAINT

    Por ejemplo, los siguientes dos comandos eliminan un constraint de integridad:

    -- Ejemplo 1:.

    SQL> ALTER TABLE Dept DROP PRIMARY KEY;

    -- Ejemplo 2:.

    SQL> ALTER TABLE Item DROP CONSTRAINTS fk_item;

  • 7/23/2019 Manual de BDA I

    36/191

    36

    CARRERAS PROFESIONALES

    CIBERTEC

    2. Manejando ndices

    Un ndice es una estructura diseada para obtener un acceso ms rpido a losdatos contenidos dentro de una tabla.

    Un ndice es independiente de los datos almacenados en la tabla y cuando se

    encuentra bien definido, es decir, cuando se forma atendiendo a la gran mayora delas consultas que se harn sobre una tabla, reduce significativamente la bsqueda,aumentando el rendimiento.

    Inmediatamente luego de creado el ndice, la base de datos Oracle comienza amantenerlo de acuerdo a las inserciones, actualizaciones y eliminaciones deregistros de la tabla en la cual se ha implementado.

    Tipos de ndices

    Existen tres tipos de ndices cuya naturaleza depende de la forma en que haya sidocreado. Estos tipos son:

    Un ndice nico es aqul que tiene la restriccin adicional de que el grupo decolumnas indexadas define una nica fila. Sin embargo, si no van a existir msgrupos de columnas con estas caractersticas, dentro de una misma tabla, serecomienda crear el conjunto como una clave primaria ya que de todas formasOracle asociar un ndice nico a esta restriccin (la clave primaria).

    Un ndice no nico, que es aqul que no impone la restriccin de que las filas nodeban repetirse.

    Un ndice compuesto es aqul que agrupa varias columnas de la tabla. Este tipo esmuy til cuando las sentencias de seleccin (SELECT) efectan bsquedas porvarios criterios (columnas) en una misma tabla. Es importante el orden en que seponen las columnas al crear el ndice; la columna ms referenciada debera ser

    puesta en primer lugar y as sucesivamente.

    Consideraciones en el diseo de ndices

    Un ndice slo es efectivo cuando es utilizado. Es por eso que debe asegurarseque la frecuencia de uso sea muy alta y que su implementacin redunde enmejoras de rendimiento de las consultas efectuadas a la tabla donde reside elndice. Sin embargo, no debe explotarse el uso de los ndices dentro de una mismatabla porque con cada operacin de insercin, actualizacin o eliminacin que selleva a cabo sobre una tabla, sus ndices se deben recrear, con el consiguiente usode recursos que se produce. A menudo, es conveniente eliminar o desactivartemporalmente un ndice cuando sabemos que se va a efectuar una operacin decarga/actualizacin/eliminacin masiva en la tabla y ms tarde volver a crearlo,

    cuando la operacin haya finalizado.

    Considere las siguientes reglas de indexacin para cuando se enfrente a la tareade decidir qu tablas indexar:

    Indexe solamente las tablas cuando las consultas (queries) no accedan auna gran cantidad de filas de la tabla. Use ndices cuando una consultaacceda a un porcentaje menor al 5% de las filas de una tabla.

    No indexe tablas que son actualizadas con mucha frecuencia.

  • 7/23/2019 Manual de BDA I

    37/191

    Base de Datos Avanzado I

    37

    CIBERTEC CARRERAS PROFESIONALES

    Indexe aquellas tablas que no tengan muchos valores repetidos en lascolumnas escogidas. Recuerde que, finalmente, el ndice hace unabsqueda secuencial dentro de un conjunto de filas objetivo.

    Las consultas muy complejas (en la clusula WHERE), por lo general, notoman mucha ventaja de los ndices. Cuando posea ms experiencia podrcorroborar esta afirmacin y estar preparado para arreglar estassituaciones.

    Tambin es importante decidir qu columnas indexar. Siga las siguientes reglascuando tenga que tomar esta decisin:

    Escoja las columnas que se utilizan con mayor frecuencia en las clusulasWHERE de las consultas.

    No indexe aquellas columnas que tengan demasiados valores repetidos enellas.

    Las columnas que toman valores nicos son excelentes candidatas paraindexar. Oracle, automticamente, indexa las claves primarias de las tablas.

    Indexe las columnas que sirven para unir una tabla con otras (join en las

    consultas). Si hay columnas que no tienen valores nicos por s solas, pero que enconjunto con otra columna forman una dupla nica o con pocas repeticiones(menos que las columnas individualmente), entonces conviene indexarlas(siempre y cuando existan consultas que las utilicen en conjunto). Estosndices reciben el nombre de ndices compuestos.

    Otra consideracin importante a tomar en cuenta es que los ndices deben residiren un tablespace diferente de donde residen las tablas.

    Por ejemplo, los siguientes dos comandos crean un ndice:

    -- Ejemplo 1:

    SQL> CREATE INDEX emp_ename ON Emp(ename) TABLESPACE indx;

    Los ndices tambin pueden ser nicos o no nicos. Un ndice nico garantiza quedos filas de una tabla no tengan valores duplicados en la columna o columnas queconforman el ndice.

    -- Ejemplo 2:.

    SQL> CREATE UNIQUE INDEX dept_unique_index ON Dept(dname(TABLESPACE indx;

    Creando ndices basados en funciones

    Los ndices basados en funciones facilitan las consultas que evalan un valorretornado por una funcin o expresin. El valor de la funcin o expresin esrecalculado y guardado por el ndice.Para la creacin de un ndice basado en funciones en su esquema debe tener elprivilegio de sistema QUERY REWRITE. Para crearlos en otros esquemas debetener los privilegios CREATE ANY INDEX y GLOBAL QUERY REWRITE.

    -- Otorgando Privilegios.

    SQL> GRANT query rewrite TO Scott;

  • 7/23/2019 Manual de BDA I

    38/191

    38

    CARRERAS PROFESIONALES

    CIBERTEC

    SQL> GRANT global query rewrite TO Scott;

    Por ejemplo, considere la expresin en la clusula WHERE de abajo:

    SQL> CREATE INDEX idx ON desarrollo.emp (comm + sal);

    SQL> SELECT * FROM emp WHERE (comm + sal) < 5000;

    Por ejemplo, considere la funcin en la clusula WHERE de abajo:

    SQL> CREATE INDEX idx_emp_name ON desarrollo.emp (Upper(ename));

    SQL> SELECT * FROM emp WHERE Upper(ename) = `JONES`;

    Eliminando ndicesPara eliminar un ndice, debe estar contenido en su esquema o debe tener elprivilegio de sistema DROP ANY INDEX.

    El siguiente comando elimina un ndice:SQL> DROP INDEX idx_emp_name;

  • 7/23/2019 Manual de BDA I

    39/191

    Base de Datos Avanzado I

    39

    CIBERTEC CARRERAS PROFESIONALES

    3. Manejando Secuencias

    A menudo, es preciso generar nmeros en forma ordenada para implementar, porejemplo, valores para una llave primaria en una tabla o garantizar que esosnmeros no se repiten y van siempre en un orden predefinido por el desarrollador(no necesariamente secuenciales).

    La forma tradicional de efectuar lo anterior sera almacenar el ltimo nmeroutilizado en un registro especial, bloquearlo, obtener el prximo valor, actualizar elregistro, desbloquearlo y utilizar el nmero. Sin embargo, para eso, Oracleimplementa los objetos denominadas secuencias que permiten hacer lo anterior demanera transparente para el usuario.

    Las secuencias son objetos de la base de datos en los que, mltiples usuarios,pueden generar series de nmeros enteros diferentes.

    Creando SecuenciasPara crear una secuencia en su esquema, debe tener el privilegio de sistemaCREATE SEQUENCE. Para crear una secuencia en otro esquema de usuario,

    debe tener el privilegio CREATE ANY SEQUENCE.Por ejemplo, la siguiente sentencia crea una secuencia para generar nmeros queservirn para dar valores a la columna empno de la tabla Emp:

    SQL> CREATE SEQUENCE seq_empleadoINCREMENT BY 1START WITH 1NOMAXVALUENOCYCLE;

    Por ejemplo, la siguiente sentencia crea una secuencia para generar nmeros queservirn para dar valores a la columna empno de la tabla Emp:

    Los parmetros significan lo siguiente:

    Increment by: Indica la cantidad de incremento de la secuencia. Start with: Es el valor de partida de la secuencia. Minvalue: Indica cul ser el valor mnimo de la secuencia. Maxvalue: Corresponde al valor mximo que puede tomar la secuencia. Nocycle: Es el valor por defecto para establecer si la secuencia deber

    comenzar nuevamente a generar valores una vez que ha alcanzado elmximo.

    Para acceder a la secuencia creada, utilice las pseudocolumnas CURRVAL yNEXTVAL.

  • 7/23/2019 Manual de BDA I

    40/191

    40

    CARRERAS PROFESIONALES

    CIBERTEC

    La pseudocolumna NEXTVAL genera un nuevo nmero diferente a losanteriormente generados. La pseudocolumna CURRVAL devuelve el ltimonmero generado.

    SQL> SELECT seq_empleado.NEXTVAL FROM DUAL;NEXTVAL

    1

    SQL> SELECT seq_empleado.CURRVAL FROM DUAL;CURRVAL

    1

    Modificando SecuenciasPuede alterar una secuencia para cambiar cualquiera de los parmetros quedefini, excepto el nmero de secuencia inicial. Para cambiar este parmetro esnecesario eliminar la secuencia y volverla a crear.

    Por ejemplo, la siguiente sentencia modifica una secuencia:

    SQL> ALTER SEQUENCE seq_empleadoINCREMENT BY 10MAXVALUE 10000CYCLE;

    Eliminando SecuenciasUsted puede eliminar cualquier secuencia de su esquema. Para eliminar unasecuencia de otro esquema, debe tener el privilegoi DROP ANY SEQUENCE.Por ejemplo, la siguiente sentencia elimina una secuencia:

    SQL> DROP SEQUENCE seq_empleado;

  • 7/23/2019 Manual de BDA I

    41/191

    Base de Datos Avanzado I

    41

    CIBERTEC CARRERAS PROFESIONALES

    4. Manejando Sinnimos

    Los sinnimos son objetos del sistema que apuntan a otros objetos. Implementanalias de tablas, vistas, secuencias o unidades de programas. Por lo general seutilizan para esconder ciertos detalles del objeto que representan al usuario final.

    Los sinnimos pueden ser pblicos o privados. Los primeros son aqullos que caendentro del esquema PUBLIC y son vistos por todos los usuarios de la misma basede datos. Los sinnimos privados se crean dentro del esquema de un usuario enparticular y slo estar visible para quienes l estime conveniente.

    Los sinnimos proporcionan un nivel de seguridad ocultando el nombre y elpropietario de un objeto y permitiendo su localizacin transparente para objetosremotos de una base de datos distribuida. Tambin, reduce la complejidad de loscomandos SQL para los usuarios de la base de datos.

    Creando SinnimosPara crear un sinnimo privado en su esquema, debe tener el privilegio CREATESYNONYM. Para crear un sinnimo pblico, debe tener el privilegio de Sistema

    CREATE PUBLIC SYNONYM.Por ejemplo, las siguientes sentencias crean sinnimos:

    -- Ejemplo 1: Sinnimo privadoSQL> CREATE SYNONYM priv_dept FOR Desarrollo.Dept;

    -- Ejemplo 1: Sinnimo pblicoSQL> CREATE PUBLIC SYNONYM public_emp FOR Desarrollo.Emp;

    Eliminando SinnimosPara eliminar un sinnimo privado en cualquier esquema, debe tener el privilegioDROP ANY SYNONYM. Para eliminar un sinnimo pblico, debe tener el privilegio

    de Sistema DROP PUBLIC SYNONYM.

    Por ejemplo, las siguientes sentencias eliminan sinnimos:

    -- Ejemplo 1: Sinnimo privadoSQL> DROP SYNONYM priv_dept;

    -- Ejemplo 1: Sinnimo pblicoSQL> DROP PUBLIC SYNONYM public_emp;

  • 7/23/2019 Manual de BDA I

    42/191

    42

    CARRERAS PROFESIONALES

    CIBERTEC

    Resumen

    En una base de datos Oracle pueden existir los siguientes tipos de objetos: tablas,restricciones (constraints), ndices, secuencias, sinnimos.

    Los tipos de restricciones (constraints) que existen son primary key, foreign key,not null, unique y check.

    Un ndice es un objeto de base de datos que permite optimizar las consultas.

    Una secuencia es un objeto de base de datos que permite generar valoresnumricos nicos. Estos valores son generalmente asignados a llaves primarias

    numricas.Un sinnimo es un alias que se aplica a un objeto de base de datos. Facilita la

    referencia a dicho objeto.

    Si desea saber ms acerca de estos temas, puede consultar las siguientespginas.

    http://www.java2s.com/Tutorial/Oracle/0120__Table/Catalog0120__Table.htm

    Aqu hallar ejercicios y ejemplos sobre el uso de tablas.

    http://www.java2s.com/Tutorial/Oracle/0100__Sequences/Catalog0100__Sequenc

    es.htmAqu hallar ejercicios y ejemplos sobre el uso de secuencias.

    http://www.java2s.com/Tutorial/Oracle/0180__Index/Catalog0180__Index.htm

    Aqu hallar ejercicios y ejemplos sobre el uso de secuencias.

  • 7/23/2019 Manual de BDA I

    43/191

    Base de Datos Avanzado I

    43

    CIBERTEC CARRERAS PROFESIONALES

    SENTENCIAS SQL DE MANIPULACIN DE DATOS YFUNCIONES PREDEFINIDAS EN UNA BASE DE DATOS

    ORACLELOGRO DE LA UNIDAD DE APRENDIZAJE

    1. Al trmino de la unidad, los alumnos podrn utilizar adecuadamente el LenguajeSQL para manipular informacin en una base de datos ORACLE.

    2. Al trmino de la unidad, los alumnos conocern las funciones predefinidas en unabase de datos ORACLE.

    TEMARIO

    Introduccin al SQL Manipulacin de datos y uso de las funciones predefinidas de una base de datos

    Oracle

    ACTIVIDADES PROPUESTAS

    Identificar las principales categoras de sentencias SQL Ejecutar cada caso de sentencias DML Utilizar las principales funciones predefinidas de una base de datos Oracle

    UNIDAD DE

    APRENDIZAJE

    3

    SEMANA

    3

  • 7/23/2019 Manual de BDA I

    44/191

    44

    CARRERAS PROFESIONALES

    CIBERTEC

    1. INTRODUCCIN A SQL

    El lenguaje estructurado de consulta (SQL) define cmo manipular los datos enOracle. En este curso, no se pretende ensear a detalle cada instruccin SQL deOracle. Se sobre entiende que el alumno conoce este lenguaje. Lo que s esimportante conocer, son algunas de las funcionalidades o diferencias propias que

    Oracle ha adicionado a las instrucciones SQL para facilitar las operaciones deacceso y manipulacin de datos. El SQL de Oracle est basado sobre losestndares de ANSI (American National Standards Institute y la ISO (InternationalStandards Organization).Las instrucciones SQL pueden dividirse en cinco categoras que se muestran acontinuacin:

    Las instrucciones del lenguaje de manipulacin de datos (DataManipulation Language, DML) permiten cambiar o consultar los datoscontenidos en una tabla de la base de datos, pero no permiten cambiar laestructura de una tabla u otro objeto.

    Las instrucciones del lenguaje de definicin de datos (Data Definition

    Language, DDL) permiten crear, borrar o modificar la estructura de unobjeto del esquema. Las instrucciones que cambian los permisos relativosa los objetos del esquema tambin pertenecen al DDL.

    Las instrucciones de control de transacciones garantizan la consistencia delos datos, organizando las instrucciones SQL en transacciones lgicas, quese completan o fallan como una unidad.

    Las instrucciones de control de sesin cambian las opciones de unaconexin determinada con la base de datos, por ejemplo para activar lastrazas de SOL o activar un suceso.

    Las instrucciones de control del sistema cambian las opciones que afectan

    a la base de datos completa, por ejemplo para activar o desactivar elarchivado definitivo.

    .

  • 7/23/2019 Manual de BDA I

    45/191

    Base de Datos Avanzado I

    45

    CIBERTEC CARRERAS PROFESIONALES

    2. INSTRUCCIONES DML Y OPERADORES

    Las instrucciones de manipulacin de datos (DML) permitidas son SELECT,INSERT, UPDATE y DELETE:

    SELECT devuelve filas de la base de datos que cumplan los criterios

    definidos en su clusula WHERE. INSERT aade filas a una tabla de La base de datos. UPDATE modifica las filas de una tabla que cumplan la clusula WHERE. DELETE borra las filas identificadas por la clusula WHERE.

    Adems de WHERE estas instrucciones pueden tener otras clusulas que sedescriben ms adelante en esta seccin. Cuando se ejecutan instrucciones SQLdesde SQL *PLUS, los resultados se presentan en la pantalla. En el caso de lasinstrucciones UPDATE, 1NSERT o DELETE. SQL *PLUS devuelve el nmero defilas procesadas.

    2.1 Instruccin SELECT

    Una instruccin SELECT extrae datos de la base de datos. Permite consultar losvalores que contienen los campos de tablas y/o vistas de la base de datos. Laforma general de una instruccin SELECT es:

    SELECT [DISTINCT | ALL] {*, columna [alias], expresin, }FROM listado de tablas[WHERE condicin(es)][GROUP BY expresin [, expresin] ][HAVING condicin][ORDER BY {columna, expresin, alias} {ASC | DESC}]

    En SQL * PLUS, una instruccin SELECT, muestra en pantalla las filas quesatisfacen las condiciones de la consulta. Toda bsqueda de caracteres es case

    sensitive, si los datos se guardaron en mayscula. El dato a buscar deberescribirse en mayscula. Para efecto de la manipulacin del Diccionario de datos,se debe tener en cuenta que Oracle guarda dicha informacin SIEMPRE enmaysculas. Por ejemplo, al crear una tabla:

    CREATE TABLE emp (EMPNO NUMBER(4), ENAME );

    Si se desea buscar informacin acerca de esta tabla, muchas veces se hace losiguiente:

    SQL> SELECT owner, table_name, tablespace_name FROM dba_tables WHEREtable_name = emp;

    No rows selected

    Lo correcto debera ser de la siguiente manera:

    SQL> SELECT owner, table_name, tablespace_name FROM dba_tables WHEREtable_name = EMP;

    OWNER TABLE_NAME TABLESPACE_NAME-------------------------- ----------------------------- ----------------------------SCOTT EMP SYSTEM

  • 7/23/2019 Manual de BDA I

    46/191

    46

    CARRERAS PROFESIONALES

    CIBERTEC

    Es importante conocer la estructura del objeto que se pretende acceder. Para ello,se utiliza el comando DESC[RIBE] de SQL *PLUS. Este comando no es uncomando de SQL estndar. Es slo para el intrprete. Por ejemplo, para mostrar laestructura de la tabla EMP hagamos lo siguiente:

    SQL>DESC emp

    O tambin:

    SQL>DESCRIBE emp

    Clusula WHEREPara mostrar o seleccionar solo algunos registros, es decir, aplicar un filtro, seusa la clusula WHERE seguido de una condicin:

    SELECT ename, job, deptno, hiredate, salFROM empWHERE job = MANAGERAND TO_CHAR(hiredate,DD/MM/YYYY) = 02/04/81;

    Clusula ORDER BYPara ordenar la salida de una sentencia SELECT se usa la clusula ORDER BY. Acontinuacin se muestra un ejemplo:

    SELECT empno, ename, sal * 12 salarioFROM empORDER BY salario desc;

    Para ordenar por mltiples columnas:

    SELECT empno, ename, sal * 12 salarioFROM empORDER BY salario, ename desc;

    En este caso al poner la palabra reservada DESC, significa que la salida delSELECT ser retornado en orden DESCENDENTE de acuerdo a las columnasmencionadas. Para el caso contrario (ordenacin ascendente), se utiliza la palabraASC.

    Uso de AliasLos alias son tiles cuando se requiere resolver algn tipo de ambigedad, porejemplo cuando haya columnas en dos tablas con el mismo nombre.

    Por ejemplo, esta consulta utiliza alias para las dos tablas para diferenciar, lacolumna DEPTNO, cuyo nombre se repite en ambas tablas:

    SELECT empno, ename, A.deptnoFROM emp A, dept BWHERE A.deptno = B.deptno;

    Cuando necesitamos definir un alias cuyo nombre esta compuesto por ms de unapalabra, como el ejemplo anterior, este tipo de alias debe encerrarse entrecomillas ( ). Por ejemplo:

    SELECT ename AS nombre, sal salario, sal * 12 salario annualFROM emp;

  • 7/23/2019 Manual de BDA I

    47/191

    Base de Datos Avanzado I

    47

    CIBERTEC CARRERAS PROFESIONALES

    SubconsultasEs una sentencia SELECT que esta dentro de una clusula de otra sentenciaSELECT. La clusula puede ser Where, Having o From.Sintaxis:

    SELECT select_listFROM table

    WHERE expr operator (SELECT select_list FROM table)

    Donde operator puede ser >, =, >=, =, ( select sal from emp whereempno=7566)

    Subconsultas de mltiples filas

    Se utilizarn los operadores: IN, ANY, ALL.

    SQL> SELECT ename, sal, deptno FROM emp WHERE sal IN (SELECTMIN(sal) FROM emp group by deptno)

    SQL> SELECT empno,ename,job FROM emp WHERE sal < ANY ( SELECT sal FROMemp where job=CLERK ) AND job = CLERK ;

    Subconsultas de mltiples columnasSi se desea comparar dos o ms columnas se debe escribir una clusula WHEREcompuesta utilizando operadores locales. Esto permite combinar condiciones dewhere duplicados dentro de una clusula where simple.

    SQL> SELECT * FROM emp WHERE (empno,deptno) IN ( SELECTempno,deptno FROM emp where job=MANAGER)

    Rownum

    Devuelve, en una consulta, el nmero de fila actual. Resulta til para limitarnmero total de filas, y se usa principalmente en la clusula WHERE de lasconsultas y en la clusula SET de las instrucciones UPDATE. ROWNUM devuelveun valor de tipo NUMBER.

    El ejemplo siguiente devuelve slo las primeras dos filas de la tabla EMP:

    SQL> SELECT * FROM emp WHERE ROWNUM < 3;

    El valor de ROWNUM para la primera fila es 1, para la segunda es 2, y assucesivamente. El valor de ROWNUM se asigna a las filas antes de que se realiceuna ordenacin.

  • 7/23/2019 Manual de BDA I

    48/191

    48

    CARRERAS PROFESIONALES

    CIBERTEC

    2.2 Instruccin INSERT

    La sintaxis de la orden INSERT es la siguiente:

    INSERT INTO tabla de referencia(nombre de columnas)VALUES

    (expresiones);

    Donde tabla_de_referencia, es la tabla en la cual se ingresar un nuevo registro,nombres_de_columnas es la lista de campos que ser considerada en lainsercin. Esta lista va entre parntesis. Expresiones son los valores que serninsertados correspondiendo uno a uno a los nombres de columnas anteriormentemencionados. La expresin puede ser una sentencia SELECT cuya lista decampos deben ser correspondientes a los nombres de columnas. En este caso, nose debe incluir la clusula VALUES.

    ConvencionalINSERT INTO emp(empno, ename, job, manager,hiredate, sal, comm)VALUES(2296,JPEREZ,SALESMAN,7782,TO_DATE(25/09/2008,DD/MM/YYYY),3000, 100);

    Con variables de sustitucinLas variables de sustitucin son usadas en el entorno de SQL*PLUS, para ellos seantepone el smbolo &, lo que har que el SQL*Plus solicite los valores paraaquellas variables que tienen antepuestas el mencionado smbolo.

    INSERT INTO dept (deptno, dname, local)VALUES (&Departamento, &Nombre,&Localizacion);

    SQL>INSERT INTO dept (deptno, dname, local)VALUES (&Departamento, &Nombre,&Localizacion);Enter value for Departamento: 80Enter value for Nombre: SISTEMASEnter value for Localizacion: LIMA

    Con prompts personalizados

    ACCEPT depto_d PROMPT Por favor ingrese el nmero del deptoACCEPT name_d PROMPT Por favor ingrese el nombre del deptoINSERT INTO dept (deptno, dname)VALUES (&depto_d,&name_d);

    Copiando filas de otra tabla

    INSERT INTO managers(id, name, salary, hiredate)SELECT empno, ename, sal, hiredate FROM emp WHERE job =MANAGER;

  • 7/23/2019 Manual de BDA I

    49/191

    Base de Datos Avanzado I

    49

    CIBERTEC CARRERAS PROFESIONALES

    2.3 Instruccin UPDATE

    La sintaxis de la orden UPDATE es la siguiente:

    UPDATE tabla_de_referencia SETNombre_columna1 = expresion1,Nombre_columna2 = expresion2,

    Nombre_columna3 = (sentencia_select),WHERE clusula_where;

    Donde, tabla_de_referencia es la tabla que se actualizar, nombre_columnaN sonlas columnas a las que se le asigna un valor, expresionN son los valorescorrespondientes para cada nombre de columna. El valor que se asigne a unacolumna puede venir del resultado de una sentencia SELECT. La condiciones queel SELECT retorne slo una fila, y los valores de los campos del SELECT seancorrespondientes a las columnas que estn actualizando en el UPDATE. Laclusula_where es la condicin que deben cumplir los registros para seractualizados.

    Convencional

    UPDATE emp SET deptno = 20 WHERE empno = 7782;

    Con una subconsulta de mltiples columnas

    UPDATE emp SET (job, deptno) = (SELECT job, deptno FROM empWHERE empno = 7499) WHERE empno = 7698;

    Con multiples subconsultas

    UPDATE emp SET deptno = (SELECT deptno FROM emp WHEREempno = 7788) WHERE job = (SELECT job FROM emp WHERE empno

    = 7788);

    2.4 Instruccin DELETE

    La orden DELETE elimina los registros que cumplen con la condicin definida enel WHERE. La sintaxis es la siguiente:

    DELETE FROM tabla_de_referencia WHERE clusula_where;

    Donde, tabla_de_referencia es la tabla en la cual se eliminarn los registroscorrespondientes, clusula_where es la condicin que cumplirn los registros quesern eliminados. El CURRENT OF cursor es para ser usado cuando se estabarriendo un cursor y se desea eliminar de la tabla el registro actual del cursor.

    ConvencionalDELETE FROM dept WHERE dname = ACCOUNTING;

    Con una subconsultaDELETE FROM emp WHERE deptno = (SELECT deptno FROM deptWHERE dname = SALES);

  • 7/23/2019 Manual de BDA I

    50/191

    50

    CARRERAS PROFESIONALES

    CIBERTEC

    2.5 Operadores

    Operadores de comparacin

    =, >, >=,

  • 7/23/2019 Manual de BDA I

    51/191

    Base de Datos Avanzado I

    51

    CIBERTEC CARRERAS PROFESIONALES

    Operadores lgicos

    AND

    SELECT empno, ename, job, sal FROM emp WHERE sal >= 1100 ANDjob = CLERK;

    OR

    SELECT empno, ename, job, sal FROM emp WHERE sal >= 1100 ORjob = CLERK;

    NOT, NOT IN, NOT BETWEEN, NOT LIKE

    SELECT empno, ename, job FROM emp WHERE job NOT IN ( CLERK,MANAGER, ANALYST);

    3. CONSULTANDO DOS O MS TABLAS

    JOIN

    Se utiliza para consultar datos de ms de una tabla. Se escribe en la parte de lasentencia WHERE. Se pone como prefijo de la columna el nombre de la tablacuando la misma columna aparece en ms de una tabla.

    Tipos de Join

    Equijoin Non-equijoin. Outer-join Self-join.

    EquijoinSELECT emp.ename, emp.job, emp.sal, dept.dname FROM emp, deptWHERE emp.deptno = dept.deptno;

    Lo que hace un Equijoin es igualar los valores de los campos que son comunesentre las diferentes tablas. Por ejemplo, en el caso anterior, para cada empleadose est mostrando el campo dept.dname (nombre del departamento), el cual noest en la tabla EMP. El dato comn que se tiene es que la tabla EMP tiene elcampo emp.deptno ( cdigo del departamento ). Con ese dato se va a buscar elnombre del departamento que est en la tabla DEPT. Por eso, se hace el JOINemp.deptno=dept.deptno. Otra manera de expresar el select anterior sera:

    SELECT emp.ename, emp.job, emp.sal, dept.dname FROM emp JOINdept ON emp.deptno = dept.deptno;

    Non-EquijoinSELECT e.ename, e.job, e.sal, s.grade FROM emp e, salgrade sWHERE e.sal BETWEEN s.losal AND s.hisal;

  • 7/23/2019 Manual de BDA I

    52/191

    52

    CARRERAS PROFESIONALES

    CIBERTEC

    Outer-join

    Si un registro no satisface un join, el registro no aparecer en los resultados de laconsulta.Por ejemplo, en la condicin equijoin de EMP y DEPT, el departamentoOPERATIONS no aparecer porque nadie trabaja en ese departamento.El operador de outer join es el signo(+) que se usa para ver los registros que nocumplen en el join. En el ejemplo aparecern los nombres de departamentos.

    SELECT e.empno, e.ename, e.job, e.sal, d.dnameFROM emp e, dept dWHERE e.deptno(+) = d.deptno;

    SELECT e.empno, e.ename, e.job, e.sal, d.dnameFROM emp e LEFT JOIN dept dON e.deptno = d.deptno;

    Self-join

    Este tipo de JOIN se utiliza para consultar datos que se encuentran dentro de unamisma tabla (join consigo mismo). Se requiere consultar el nombre del managerdel empleado con cdigo empno igual a 7369 (MGR).

    SELECT e.ename EMPLEADO, e.sal SALARIO, e.job OCUPACION,m.ename MANAGER FROM emp e, emp m WHERE e.mgr=m.empnoAND e.empno=7369;

  • 7/23/2019 Manual de BDA I

    53/191

    Base de Datos Avanzado I

    53

    CIBERTEC CARRERAS PROFESIONALES

    4. FUNCIONES PREDEFINIDAS

    Aceptan uno o ms argumentos y retornan un valor por cada fila retornada por laconsulta. Las funciones estndar del Oracle9i permiten realizar diversasoperaciones tiles para los desarrolladores y administradores de base de datos.stas se agregan al Server en el momento de la instalacin de una Base de datos

    por defecto.Las funciones se clasifican en los siguientes grupos:

    Funciones de carcter Funciones numricas Funciones de fecha Funciones de conversin Funciones generales Funciones de grupo

    Funciones de carcterSe dividen en dos grupos:

    Funciones de conversin:

    Funcin ResultadoLOWER(SQL Course) sql courseUPPER(SQL Course) SQL COURSEINITCAP(SQL Course) Sql Course

    Funciones de manipulacin de caracteres:

    Funcin ResultadoCONCAT(Good, String) GoodStringSUBSTR(Hola, 1, 3) HolLENGTH(Hola) 4

    INSTR(Hola,o) 2LPAD(120,10,*) *******120RPAD(120,10,*) 120*******Trim( esto es una prueba ) esto es una prueba

    Funciones Numricas

    ROUND Redondea el valor a un nmero especfico dedecimales.

    TRUNC Trunca el valor a un nmero especfico dedecimales.

    MOD Retorna el residuo de la divisin

    ROUND(45.936 , 2) 45.94TRUNC(45.936 , 2) 45.93MOD(1600 , 300) 100

    SELECT sal/7 operacion, round(sal/7, 2) redondeo, trunc(sal/7)truncoFROM emp;

  • 7/23/2019 Manual de BDA I

    54/191

    54

    CARRERAS PROFESIONALES

    CIBERTEC

    Funciones de fechaOracle guarda datos en un formato numrico interno: por centuria, ano, mes, da,hora, minuto y segundo.El formato por defecto depende de la instalacin del Oracle software.

    SYSDATE es una funcin que retorna fecha y hora.DUAL es una tabla pblica que se utiliza para ejecutar funcionespredefinidas.

    Se puede llevar a cabo clculos utilizando operaciones aritmticas como adicin ysustraccin:

    date + number = datedate number = datedate date = nmero de dasdate + number/24 = date (suma horas)

    Por ejemplo: sysdate = 26/12/2004

    MONTHS_BETWEEN(sysdate +40, sysdate) 1.29032258ADD_MONTHS(sysdate, 6) 26/06/2005NEXT_DAYS(sysdate, VIERNES) 31/12/2004LAST_DAY(sysdate) 31/12/2004ROUND(sysdate, MONTH) 01/01/2005ROUND(sysdate, YEAR) 01/01/2005TRUNC(sysdate, MONTH) 01/12/2004TRUNC(sysdate, YEAR) 01/01/2004

    SELECT SYSDATE, ADD_MONTHS(sysdate,4) Agregados,NEXT_DAY(sysdate, VIERNES) Viernes, LAST_DAY(sysdate) ultimoFROM DUAL;

    Funciones de conversin

    Conversin de tipos de datos implcitosEl servidor Oracle convierte automticamente lo siguiente:.

    Funcin ResultadoVARCHAR2 or CHAR NUMBERVARCHAR2 or CHAR DATENUMBER VARCHAR2DATE VARCHAR2

    Conversin de tipos de datos explcitosSQL provee tres funciones para convertir un tipo de dato a otro:

    TO_CHAR():

    a) Funciones TO_CHAR con fecha: TO_CHAR(fecha, formato)

    Elementos de Formato de fechaYYYY Ao completo en nmeroYEAR Ao deletreadoMM Valor de dos dgitos para el mesMONTH Nombre completo del mesDD Nmero del da en el mesDAY Nombre del daD Nmero del da en la semana

  • 7/23/2019 Manual de BDA I

    55/191

    Base de Datos Avanzado I

    55

    CIBERTEC CARRERAS PROFESIONALES

    HH24 Horas en formato 24MI MinutosSS Segundos

    A continuacin algunos ejemplos:

    SELECT ename, TO_CHAR(hiredate, MM/YYYY) Mes de Ingreso

    FROM emp;

    SELECT TO_CHAR(sysdate, DD/MM/YYYY HH2:MI:SS) fechaFROM dual;

    b) Funciones TO_CHAR con nmeros: TO_CHAR(nmero, formato)

    Elementos de Formato Numrico9 Representa un dgito0 Fuerza que se muestre un 0$ Coloca el signo dlarL Utiliza el smbolo de la moneda. Imprime un punto decimal

    , Imprime un indicador de miles

    A continuacin algunos ejemplos:

    SELECT TO_CHAR(sal, $ 99,999) SalarioFROM emp;

    SELECT TO_CHAR(comm, L 0999.99) ComisionFROM emp;

    TO_NUMBER():Convierte una cadena de caracteres que contiene dgitos a un nmero con formato

    especificado por el modelo de formato.TO_DATE():Convierte una cadena de caracteres representando una fecha a un valor de fechacon formato especificado. Si se omite, el formato es DD-MON-YY.

    NVL():Convierte un valor nulo a un valor que puede ser un nmero, un carcter o unafecha.

    NVL(comm, 0)NVL(hiredate, sysdate)NVL(job, no job)

    DECODE():DECODE(mivariable, valor1, retorno1, valor2, retorno2, .,retorno_defecto)

    Donde si mivariable es igual a valor1, se retorna retorno1Donde si mivariable es igual a valor2, se retorna retorno2Donde si mivariable no es igual a ninguno de los valores anteriores, se retornaretorno_defecto

  • 7/23/2019 Manual de BDA I

    56/191

    56

    CARRERAS PROFESIONALES

    CIBERTEC

    SQL> SELECT DECODE(USER, SCOTT, usted es Scott, SYSTEM, Es eladministrador, No es conocido) resultado FROM DUAL;

    RESULTADO

    usted es Scott

    Funciones de grupoEstas funciones operan en grupos de registros para entregar un resultado porgrupo.

    Tipo de FuncionesAVG, COUNT, MAX, MIN, STDDEV, SUM, VARIANCE

    Creando grupo de datosDivide las filas de una tabla en datos agrupados.

    SQL> SELECT deptno, AVG(sal) FROM emp GROUP BY deptno;

    SQL> SELECT deptno, job, SUM(sal) FROM emp GROUP BY deptno, job;

    Operadores Cube y Rollup

    Especifique los operadores CUBE y ROLLUP en la clusula GROUP BY de unaconsulta.El agrupamiento ROLLUP produce un juego de resultados que contiene las filasagrupadas normales y los subtotales. La operacin CUBE en la clusula GROUPBY agrupa las filas seleccionadas basadas en los valores de todas lascombinaciones posibles de expresiones de la especificacin y devuelve una solafila de informacin de resumen para cada grupo. Puede utilizar el operador CUBEpara producir filas de tabulacin cruzada.

    Nota: Al trabajar con ROLLUP y CUBE, asegrese de que las columnas quesiguen a la clusula GROUP BY tengan entre s una relacin significativa y real; delo contrario, los operadores devolveran informacin irrelevante.Los operadores CUBE y ROLLUP estn disponibles solamente en Oracle8i y enversiones posteriores.

    Operador ROLLUP

    El operador ROLLUP entrega agregados y superagregados para expresionesdentro de una sentencia GROUP BY. Los escritores de informes pueden utilizar eloperador ROLLUP para extraer estadsticas e informacin de resumen de losjuegos de resultados. Los agregados acumulativos se pueden utilizar en informes,diagramas y grficos.

    SELECT [column,] group_function(column). . .FROM table[WHERE condition][GROUP BY [ROLLUP] group_by_expression][HAVING having_expression][ORDER BY column];

  • 7/23/2019 Manual de BDA I

    57/191

    Base de Datos Avanzado I

    57

    CIBERTEC CARRERAS PROFESIONALES

    El operador ROLLUP crea agrupamientos movindose en una direccin, dederecha a izquierda, a lo largo de la lista de columnas especificada en la clusulaGROUP BY. A continuacin, aplica la funcin agregada a estos agrupamientos.

    Nota: Para producir subtotales en n dimensiones (es decir, n columnas en laclusula GROUP BY) sin un operador ROLLUP, n+1 las sentencias SELECTdeben estar enlazadas con UNION ALL. Esto hace que la ejecucin de la consultasea ineficaz, ya que cada sentencia SELECT provoca acceso de tabla. El operadorROLLUP recoge los resultados de esta con solo un acceso de tabla. El operadorROLLUP es til si hay muchas columnas implicadas en la produccin desubtotales.

    Ejemplo:

    SQL> SELECT deptno as department_id,Job as Job_id,SUM(sal) salary

    FROM empWHERE deptno < 60GROUP BY ROLLUP(deptno, job) ;

    DEPARTMENT_ID JOB_ID SALARY

    ------------------- ------------------------ ----------

    10 CLERK 1300

    10 MANAGER 2450

    10 PRESIDENT 5000

    10 8750

    20 CLERK 1900

    20 ANALYST 3000

    20 MANAGER 2975

    20 7875

    30 CLERK 950

    30 MANAGER 2850

    30 SALESMAN 5600

    30 9400

    50 ANALYST 3000

    50 3000

    29025

    15 filas seleccionadas.

  • 7/23/2019 Manual de BDA I

    58/191

    58

    CARRERAS PROFESIONALES

    CIBERTEC

    Operador CUBE

    El operador CUBE es una opcin adicional de la clusula GROUP BY en unasentencia SELECT. El operador CUBE se puede aplicar a todas las funcionesagregadas, incluidas AVG, SUM, MAX, MIN y COUNT. Se utiliza para producirjuegos de resultados que, normalmente, se utilizan para informes de tabulacincruzada. Mientras ROLLUP produce slo una fraccin de las posiblescombinaciones subtotales, CUBE produce subtotales para todas las posiblescombinaciones de agrupamientos especificados en la clusula GROUP BY y unasuma total.

    SELECT [column,] group_function(column). . .FROM table[WHERE condition][GROUP BY [CUBE] group_by_expression][HAVING having_expression][ORDER BY column];

    El operador CUBE se utiliza con una funcin agregada para generar filasadicionales en un juego de resultados. Las columnas incluidas en la clusulaGROUP BY tienen referencias cruzadas para producir un superjuego de grupos.La funcin agregada especificada en la lista de seleccin se aplica a dichos grupospara producir valores de resumen para las filas superagregadas adicionales. Elnmero de grupos adicionales del juego de resultados est determinado por elnmero de columnas incluidas en la clusula GROUP BY.

    De hecho, cada posible combinacin de las columnas o expresiones de la clusulaGROUP BY se utiliza para producir superagregados. Si tiene n columnas oexpresiones en la clusula GROUP BY, habr 2n posibles combinacionessuperagregadas. Matemticamente, estas combinaciones forman un cubo de n-dimensiones que es la forma con la que el operador obtuvo su nombre.

    Mediante herramientas de programacin o aplicaciones, estos valoressuperagregados se pueden introducir en diagramas y grficos que transmitenresultados y relaciones de forma visual y efectiva.

    Ejemplo:

    SQL> SELECT deptno as department_id,Job as Job_id,SUM(sal) salary

    FROM empWHERE deptno < 60GROUP BY CUBE(deptno, job) ;

  • 7/23/2019 Manual de BDA I

    59/191

    Base de Datos Avanzado I

    59

    CIBERTEC CARRERAS PROFESIONALES

    DEPARTMENT_ID JOB_ID SALARY

    ------------------- ------------------------ ----------

    10 CLERK 1300

    10 MANAGER 2450

    10 PRESIDENT 5000

    10 8750

    20 CLERK 190020 ANALYST 3000

    20 MANAGER 2975

    20 7875

    30 CLERK 950

    30 MANAGER 2850

    30 SALESMAN 5600

    30 9400

    50 ANALYST 3000

    50 3000

    CLERK 4150

    MANAGER 8275

    PRESIDENT 5000

    ANALYST 6000

    SALESMAN 5600

    29025

    15 filas seleccionadas.

  • 7/23/2019 Manual de BDA I

    60/191

    60

    CARRERAS PROFESIONALES

    CIBERTEC

    Resumen

    Las principales categoras de sentencias SQL son DML (Data ManipulationLanguage), DDL (Data Definition Language), TCL (Transaction Control Language),DCL (Data Control Language).

    Las principales sentencias DML son SELECT, INSERT, UPDATE y DELETE.

    Las funciones predefinidas de Oracle se pueden clasificar como funcionesnumricas, funciones de caracteres, funciones de fecha, funciones de conversin.

    Si desea saber ms acerca de estos temas, puede consultar las siguientespginas.

    http://www.java2s.com/Tutorial/Oracle/0040__Query-

    Select/Catalog0040__Query-Select.htm

    Aqu hallar ejercicios y ejemplos sobre la ejecucin de la sentencia SELECT.

    http://www.java2s.com/Tutorial/Oracle/0080__Insert-Update-

    Delete/Catalog0080__Insert-Update-Delete.htm

    Aqu hallar ejercicios y ejemplos sobre la ejecucin de las sentenciasINSERT, UPDATE, DELETE.

    http://www.java2s.com/Tutorial/Oracle/0300__Conversion-

    Functions/Catalog0300__Conversion-Functions.htm

    Aqu hallar ejercicios y ejemplos sobre las principales funciones de

    conversin.

  • 7/23/2019 Manual de BDA I

    61/191

    Base de Datos Avanzado I

    61

    CIBERTEC CARRERAS PROFESIONALES

    PROGRAMACIN PL/SQL

    INTRODUCCIN A ORACLE PL/SQL

    LOGRO DE LA UNIDAD DE APRENDIZAJE

    1. Al trmino de la unidad, los alumnos podrn utilizar, adecuadamente, estructurasde control y cursores dentro de un programa PL/SQL.

    2. Al trmino de la unidad, los alumnos invocarn, eficientemente, sentencias DML yfunciones predefinidas dentro de un programa PL/SQL.

    3. Al trmino de la unidad, los alumnos podrn implementar manejo de transaccionesdentro de un programa PL/SQL.

    4. Al trmino de la unidad, los alumnos sern capaces de controlar adecuadamente laocurrencia de errores en la ejecucin de sus programas PL/SQL a travs del usode excepciones.

    TEMARIO

    Introduccin a Oracle PL/SQL

    ACTIVIDADES PROPUESTAS

    Los alumnos implementarn un bloque PL/SQL. Los alumnos resolvern casos prcticos para revisar las caractersticas de cada una

    de las secciones de un bloque PL/SQL.

    UNIDAD DE

    APRENDIZAJE

    4SEMANA

    4

  • 7/23/2019 Manual de BDA I

    62/191

    62

    CARRERAS PROFESIONALES

    CIBERTEC

    1. JUSTIFICACIN DE USAR PL/SQL

    El lenguaje utilizado para acceder a las bases de datos relacionales es el llamadoLenguaje Estructurado de Consulta (SQL, Structured Query Language), que es muyflexible y transparente, es decir, sencillo y poderoso. SQL es un lenguaje de cuartageneracin, lo cual quiere decir que describe lo que quiere hacerse.

    Los lenguajes de tercera generacin, por ejemplo C y COBOL, son de naturalezams procedimental. Un programa escrito en lenguaje de tercera generacin (3GL)requiere de un algoritmo paso a paso para resolver el problema.

    Cada lenguaje tiene sus ventajas y desventajas. Por ejemplos los lenguajes 4GL,aslan al usuario de los algoritmos y estructuras de datos. Sin embargo, en algunoscasos, las estructuras procedimentales de los lenguajes 3GL resultan muy tilespara expresar un determinado programa. Es en este caso que PL/SQL combina lapotencialidad de un lenguaje procedimental (PL) con la flexibilidad de un lenguaje de4GL que es SQL.

    PL/SQL son las siglas de Procedural Language/SQL, es decir, amplia la

    funcionalidad de SQL aadiendo estructuras y funcionalidades de las que puedenencontrarse en otros lenguajes procedimentales, como los que se mencionan acontinuacin:

    Modularizacin en el desarrollo de programas

    Agrupar sentencias lgicamente relacionadas dentro de bloques Anidar sub-bloques en bloques mayores para construir programas poderosos Particionar un problema complejo en un conjunto de mdulos lgicos

    manejables y bien definidos, e implementarlos mediante bloques. Declaracin de identificadores Declarar variables, constantes, cursores y excepciones y luego utilizarlos en

    SQL y en sentencias procedimentales. Declarar variables pertenecientes a tipos de datos simples y compuestos Declarar variables basadas dinmicamente en la estructura de datos de

    alguna tabla o columna de la base de datos

    Programacin con estructuras de control de lenguajes procedimentales

    Ejecutar una serie de sentencias condicionalmente Ejecutar una serie de sentencias en forma iterativa dentro de un loop (ciclo) Procesar en forma individual cada una de las filas retornadas por una

    consulta utilizando un cursor explcito Combinar PL/SQL con herramientas de Oracle, tales como Forms de

    Developer/2000, para agrupar comandos asociados que controlen la

    ejecucin. Manejo de errores Procesar los errores reportados por el Servidor Oracle mediante rutinas de

    manejo de excepciones Declarar condiciones de error definidas por el usuario y procesarlas con

    rutinas de manejo de excepciones

  • 7/23/2019 Manual de BDA I

    63/191

    Base de Datos Avanzado I

    63

    CIBERTEC CARRERAS PROFESIONALES

    Portabilidad

    Dado que PL/SQL es propio de Oracle, puede mover programas a cualquierambiente que soporte Oracle y PL/SQL.

    Integracin PL/SQL juega un rol central tanto en el Servidor Oracle (a travs de

    procedimientos almacenados, triggers de la base de datos y paquetes) comoen las herramientas de desarrollo de Oracle (a travs de los triggers decomponentes de Developer/2000).

    Variables y tipos de datos en PL/SQL y SQL son compatibles. Por esto,PL/SQL combina el acceso conveniente a la tecnologa de bases de datoscon la necesidad de contar con capacidad de programacin procedimental.

    Mejora del rendimiento PL/SQL puede mejorar el rendimiento de una aplicacin. Los beneficios

    varan dependiendo del ambiente de ejecucin. PL/SQL agrupa sentencias SQL en un nico bloque y enva el bloque

    completo al servidor en una nica invocacin, reduciendo as el trfico en lared.

    A continuacin se muestra un ejemplo para ver la potencialidad de un PL/SQL:

    La siguiente consulta retornar un error:

    Pero si la hacemos con un bloque PL/SQL podemos capturar el error y procesarlo:

    SELECT TO_DATE(19/06/2002, mmddyyyy) FROM DUAL

    DECLAREFecha DATE;

    BEGINSELECT TO_DATE(19/06/2002, mmddyyyy )INTO FechaFROM DUAL;

    EXCEPTIONWHEN OTHERS THEN

    Dbms_output.put_line(Error en la sentencia);END;

  • 7/23/2019 Manual de BDA I

    64/191

    64

    CARRERAS PROFESIONALES

    CIBERTEC

    2. CONCEPTOS BSICOS

    2.1 Estructura de Bloques de PL/SQL

    Un bloque de cdigo PL/SQL bsico puede estar formado a lo sumo por tres partes.A continuacin, muestra el orden en que deben escribirse las secciones de los

    bloques.Seccin Descripcin InclusinDeclarativa Contiene todas las variables,

    constantes, cursores y excepcionesdefinidas por el usuario que sernreferenciadas dentro de la seccinEjecutable.

    Opcional

    Ejecutable Contienen sentencias SQL paramanipular datos en la base de datos ysentencias PL/SQL para manipulardatos en el bloque.

    Obligatoria

    Manejo de excepciones Especifica las acciones que se deben

    tomar cuando ocurre un error y seproducen condiciones de ejecucinanormales en la seccin Ejecutable.

    Opcional

    Nota:En PL/SQL, un error o advertencia se denomina excepcin (exception).