QUE SE NECESITA PARA INICIAR
Instalar Oracle 8i o superior.
De preferencia instalar una herramienta de gestin para el desarrollo
de bases de datos que nos proporcione un ambiente fcil y rpido.
Ejemplo TOAD for Oracle, SQL Developer.
ENTIDADES DE ORACLE
Oracle esta formado por dos entidades o estructuras:
Nivel Logico Instancia
Nivel Fisico Base de Datos
Por lo cual:
Instancia Estructura de Memoria que a su vez es una copia de la base de
datos.
Base de Datos Ficheros en Disco.
ESTRUCTURA LOGICA
Esta estructura logica de una base de datos esta conformada por:
Segmentos: Cada tablespace esta formado por segmentos, y puede haber uno o
mas segmentos.
Extensiones: Los segmentos estan conformados por Extensiones.
Bloque: Us la unidad mas pequena de operaciones de lectura y escritura, es lo
que conforman las extensiones.
ESTRUCTURA FISICA
Esta conformada por:
Control Files: La Instancia al arrancar necesita verificar primero este archivo, ya
que indica las ubicaciones fisicas de la base de datos. Intrucciones de arranque
de la instancia.
Data Files: Son los que se encargan de relacionar la estructura logica y fisica
de los datos. Cuando se modifican sin tener conocimiento la base de datos
puede fallar. Aqui es donde se ubica el Diccionario de Datos.
Redo Log Files: Lleva una secuencia de operaciones que se han
realizado(DML), son muy ulitles ya que pueden ayudarnos a recuperar datos en
caso de presentar falla.
TABLESPACE
Es una unidad lgica de almacenamiento dentro de una base de datos oracle, y
en la base de datos debe hacer como minimo una. Los Tablespace abstrae a los
dos elementos; tanto logicos como fisicos., es decir los datos se guardan en
segmentos en nivel logico y en datafiles en nivel fisico.
TABLAS
En Oracle existen varios objetos dentro de una base de datos: tablas, vistas,
secuencias, ndices, agrupamientos, disparadores, procedimientos almacenados,
funciones, paquetes, sinnimos, usuarios, perfiles, privilegios, roles, etc.
Una base de datos almacena su informacin en tablas, que es la unidad bsica de
almacenamiento. Una tabla es una estructura de datos que organiza los datos en
columnas y filas.
Sintaxis:
CREATE TABLE nombretabla(
Nombre_1 tipodedato,
Nombre_n tipodedato);
6
INDICES
Un ndice permite un acceso mucho ms rpido a los datos, y acceder a diferentes
filas de una misma tabla a travs de un campo (o campos clave).
Ejemplos de crear y borrrar:
no pueden existir claves duplicadas en el ndice.
CREATE [UNIQUE] INDEX <nombre_indice>
ON <nombre_tabla>(
<nombre_campo> [ASC | DESC]
{,<nombre_campo> [ASC | DESC]})
);
DROP INDEX <nombre_tabla>.<nombre_indice>;
INDICES
Tomar en cuenta que los indices ocupan espacio en disco al igual que los datos, y
tambien cada vez que se actualiza la informacion los indices se regeneran
automaticamente.
Principales tipos de Indices:
Indices Unicos
Indices No Unicos
Indices Compuestos
INDICES
Cuando Crear Indices:
Cuando la tabla contenga gran Cantidad de datos.
La informacion contenga gran cantidad de datos nulos.
Cuando se usen las clausulas WHERE, HAVING, ORDER
Cuando No Crearlos:
Con tablas que contengan informacion minima
Cuando no se emplee para consultas
Tablas que se actualizen frecuentemente
9
SECUENCIAS
Los objetos de secuencia para la generacin de cdigos numericos
automticos. Las secuencias son una solucin fcil y elegante al problema de los
cdigos autogenerados.
Sintaxis:
CREATE SEQUENCE <secuence_name>
[MINVALUE <min_val>]
[MAXVALUE <max_val>]
[START WITH <ini_val>]
[INCREMENT BY <inc_val>]
[NOCACHE | CACHE <cache_val>]
[CYCLE]
[ORDER];
Palabras reservadas CURRVAL y NEXTVAL
10
TABLAS TEMPORALES
Sintaxis:
CREATE GLOBAL TEMPORARY TABLE tabla_temp (
columna datatype [DEFAULT expr] [column_constraint(s)]
[,columna datatype [,...]]
) {ON COMMIT DELETE ROWS | ON COMMIT PRESERVE ROWS};
ON COMMIT DELETE ROWS se borran los datos cada vez que se hace
COMMIT en la sesin.
ON PRESERVE DELETE ROWS los datos no se borran hasta el final de la
sesin.
11
PL SQL
SQL es un lenguaje de consulta para los sistemas de bases de datos relacinales,
pero que no posee la potencia de los lenguajes de programacin. Cuando se
desea realizar una aplicacin completa para el manejo de una base de datos
relacional, resulta necesario utilizar alguna herramienta que soporte la capacidad
de consulta del SQL y la versatilidad de los lenguajes de programacin
tradicionales. PL/SQL es el lenguaje de programacin que proporciona Oracle para
extender el SQL estndar con otro tipo de instrucciones.
12
ESTRUCTURA DE PL/SQL
Los bloques PL/SQL presentan una estructura especfica compuesta de tres partes
bien diferenciadas
Cada una de las partes anteriores se delimita por una palabra reservada, de modo
que un bloque PL/SQL se puede representar como sigue:
DECLARE
/* Parte Declarativa */
BEGIN
/* Parte de Ejecucin */
EXCEPTIONS
/* Parte de Excepciones */
END;
De las anteriores, nicamente la seccin de ejecucin es obligatoria, que quedara
delimitada entre las clusulas BEGIN y END
13
TIPOS DE BLOQUES
ANONIMO
[DECLARE]
BEGIN
--Instruccin
[EXCEPTION]
END;
PROCEDIMIENTO
PROCEDURE name IS
-- Instruccin
BEGIN
--Instruccin
[EXCEPTION]
END;
FUNCION
FUNCTION name RETURN datatype IS
-- Instruccin
BEGIN
--Instruccion
RETURN value;
[EXCEPTION]
END;
14
VARIABLES EN PL SQL
Almacenar datos temporalmente
Manipular los valores almacenados
Reusabilidad
EJEMPLO
Identificador [CONSTANT] datatype [NOT NULL] [:=] | DEFAULT expresion;
15
TIPOS DE DATOS
CHAR [(longitud maxima)]
VARCHAR2(longitud maxima)
LONG
NUMBER [(precision,escala)]
BOOLEAN
DATE
16
OPERADORES
Tipo de operador
Operador de asignacin
Operadores aritmticos
Operadores relacionales o
de comparacin
Operadores lgicos
Operador de
concatenacin
Operadores
:= (dos puntos + igual)
+ (suma)
- (resta)
* (multiplicacin)
/ (divisin)
** (exponente)
= (igual a)
<> (distinto de)
< (menor que)
> (mayor que)
>= (mayor o igual a)
<= (menor o igual a)
AND (y lgico)
NOT (negacion)
OR (o lgico)
||
17
SENTENCIAS DE CONTROL DE FLUJO
IF ELSE
En PL/SQL es posible ejecutar un bloque de instrucciones u otro en funcin del
valor de alguna expresin lgica, mediante la utilizacin de la sentencia IF:
IF expresin_lgica THEN intrucciones_PL/SQL;
[ELSIF expresin_lgica THEN intrucciones_PL/SQL;]
[ELSE intrucciones_PL/SQL;]
END IF;
Tal y como aparece en la sintaxis de esta sentencia, se pueden presentar
diferentes alternativas, aunque al menos deben presentarse las clusulas IF ...
THEN ... END IF.
18
BUCLE LOOP
El bucle LOOP, se repite tantas veces como sea necesario hasta que se fuerza su
salida con la instruccin EXIT. Su sintaxis es la siguiente
LOOP
--intrucciones_PL/SQL
EXIT [WHEN expresin_lgica];
END LOOP;
19
BUCLE WHILE
La sentencia WHILE Evala una condicin y, si sta da como resultado true , ejecuta
unasentenciao serie desentenciasantes de volver a ejecutar.
WHILE expresin_lgica LOOP
--intrucciones_PL/SQL
END LOOP;
20
BUCLE FOR
ElbucleFORle permite ejecutar cdigo en varias ocasiones por un nmero
determinado de veces.
FOR ndice IN [REVERSE] expr_entera .. expr_entera LOOP
--intrucciones_PL/SQL
END LOOP;
21
TIPOS DE DATOS REGISTRO
es una estructura de datos en PL/SQL, almacenados en campos, cada uno de los
cuales tiene su propio nombre y tipo y que se tratan como una sola unidad lgica.
Los campos de un registro pueden ser inicializados y pueden ser definidos como
NOT NULL. Aquellos campos que no sean inicializados explcitamente, se
inicializarn a NULL.
TYPE nombre_tipo IS RECORD
(campo <TIPO_VAR> [NULL I NOT NULL]
[, campo.] );
22
CURSORES
PL/SQL utiliza cursores para gestionar las instrucciones SELECT. Un cursor es un
conjunto de registros devuelto por una instruccin SQL.
Podemos distinguir dos tipos de cursores:
Cursores implcitos. Este tipo de cursores se utiliza para operaciones SELECT
INTO. Se usan cuando la consulta devuelve un nico registro.
Cursores explcitos. Son los cursores que son declarados y controlados por el
programador. Se utilizan cuando la consulta devuelve un conjunto de registros.
Ocasionalmente tambin se utilizan en consultas que devuelven un nico registro
por razones de eficiencia. Son ms rpidos.
23
CURSOR IMPLICITO
Se utilizan para realizar consultas SELECT que devuelven un nico registro.
Debe existir la palabra clave INTO.
Las variables que reciben los datos devueltos por el cursor tienen que contener
el mismo tipo de dato que las columnas de la tabla.
Solo pueden devolver una nica fila. En caso de que se devuelva ms de una
fila (o ninguna fila) se producir una excepcin.
24
CURSOR IMPLICITO
EJEMPLO:
DECLARE
VARIABLE1 VARCHAR2(20);
BEGIN
SELECT CAMPO1 INTO VARIABLE1
FROM
TABLA1
WHERE CAMPO2 = FILTRO;
END;
25
EXCEPCIONES EN CURSORES IMPLICITOS
NO_DATA_FOUND: que no encuentre registros.
TOO_MANY_ROWS: que devuelva mas de una fila o registro.
26
OTROS TIPOS DE DATOS
ATRIBUTOS DE TIPO:
%TYPE
permite conocer el tipo de una variable, constante o campo de la base de
datos.
%ROWTYPE
permite obtener los tipos de todos los campos de una tabla de la
base de datos, de una vista, de un cursor, o de registro.
27
ATRIBUTO %TYPE
DECLARE
MIVARIABLE VARCHAR2(20);
MIVARIABLE TABLA1.CAMPO1%TYPE;
Podemos tener el mismo resultado
pero ahora el cdigo es ms fcil de
mantener.
BEGIN
SELECT CAMPO1 INTO MIVARIABLE
FROM
TABLA1
WHERE CAMPO2 = FILTRO;
--INSTRUCCIONES
END;
28
ATRIBUTO %ROWTYPE
DECLARE
MIVARIABLE TABLA1 %ROWTYPE;
BEGIN
SELECT * INTO MIVARIABLE
FROM
TABLA1
WHERE CAMPO2 = FILTRO;
--INSTRUCCIONES
END;
29
CURSOR EXPLICITO
Se emplean para realizar consultas SELECT que pueden devolver cero filas, o
ms de una fila.
Pasos a realizar:
Declarar el cursor.
Abrir el cursor.
Leer los datos del cursor.
Cerrar el cursor.
30
CURSOR EXPLICITO
Reglas para trabajar:
Cuando un cursor est cerrado, no se puede leer.
Cuando se cierra el cursor, no podemos usarlo.
No podemos cerrar un cursor que ya est cerrado o no ha sido abierto.
Cuando leemos un cursor debemos comprobar el resultado de la lectura utilizando los
atributos de los cursores.
%NOTFOUND
%FOUND
%ISOPEN
%ROWCOUNT
31
CURSOR EXPLICITO
DECLARE
CURSOR cEMPLEADOS IS
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES;
ID
NUMBER;
NOMBRE VARCHAR2(20);
APELLIDO VARCHAR2(20);
Podemos simplificar usando
%ROWTYPE.
BEGIN
OPEN cEMPLEADOS;
FETCH cEMPLEADOS INTO ID, NOMBRE, APELLIDO;
CLOSE cEMPLEADOS;
END;
32
SQL DINAMICO
PL/SQL ofrece la posibilidad de ejecutar sentencias SQL a partir de cadenas de
caracteres. Para ello debemos emplear la instruccin EXECUTE IMMEDIATE.
Podemos adems parametrizar nuestras consultas a travs de variables host. Una
variable host es una variable que pertenece al programa que est ejecutando la
sentencia SQL dinmica y que podemos asignar en el interior de la sentencia SQL
con la palabra clave USING . Las variables host van precedidas de dos puntos ":".
Para utilizar un cursor implcito solo debemos construir nuestra sentencia SELECT
en una variable de tipo carcter y ejecutarla con EXECUTE IMMEDIATE utilizando
la palabra clave INTO, y para cursores explcitos usamos REF CURSOR para
declarar una variable para referirnos al cursor generado con SQL dinmico.
33
TRIGGERS
Un trigger o disparador es un bloque de cdigo que se ejecuta automticamente
cuando ocurre algn evento (como insercin, actualizacin o borrado) sobre una
determinada tabla (o vista); es decir, cuando se intenta modificar los datos de una
tabla (o vista) asociada al disparador.
Se crean para conservar la integridad referencial y la coherencia entre los datos
entre distintas tablas; para registrar los cambios que se efectan sobre las tablas y
la identidad de quien los realiz; para realizar cualquier accin cuando una tabla es
modificada; etc.
Si se intenta modificar (agregar, actualizar o eliminar) datos de una tabla asociada
a un disparador, el disparador se ejecuta (se dispara) en forma automtica.
34
TRIGGERS
Los triggers no pueden ser invocados directamente.
El trigger se ejecuta en automtico al momento de estar ligado a una tabla.
No reciben ni retornan parmetros.
Sintaxis:
CREATE [OR REPLACE] TRIGGER < trigger>
{BEFORE|AFTER}
{DELETE|INSERT|UPDATE [OF col1, col2, ..., colN]
[OR {DELETE|INSERT|UPDATE [OF col1, col2, ..., colN]...]}
ON <tabla>
[FOR EACH ROW [WHEN (<condicin>)]]
DECLARE
-- variables locales
BEGIN
-- Sentencias
[EXCEPTION]
-- Sentencias control de excepcin
END <trigger>;
35
PAQUETES
Un paquete es una estructura que agrupa objetos de PL/SQL
compilados(procedimientos, funciones, variables, tipos ...) en la base de datos.
Esto nos permite agrupar la funcionalidad de los procesos en programas. Lo
primero que debemos tener en cuenta es que los paquetes estn formados por
dos partes: la especificacin y el cuerpo. La especificacin del un paquete y su
cuerpo se crean por separado.
La especificacin es la interfaz con las aplicaciones. En ella es posible declarar los
tipos, variables, constantes, excepciones, cursores y subprogramas disponibles
para su uso posterior desde fuera del paquete. En la especificacin del paquete
slo se declaran los objetos (procedimientos, funciones, variables ...), no se
implementa el cdigo. Los objetos declarados en la especificacin del paquete son
accesibles desde fuera del paquete por otro script de PL/SQL o programa.
Haciendo una analoga con el mundo de C, la especificacin es como el archivo de
cabecera de un programa en C.
36
PAQUETES
declaracin de variables,
funciones y procedimientos
implementacin
funciones y procedimientos
Sintaxis:
CREATE OR REPLACE PACKAGE PKG_MYPKG IS
-- Declaraciones de variables y constantes publicas
NOMBRE VARCHAR2(20);
-- Declaraciones de procedimientos y funciones pblicas
PROCEDURE PRO_NOMBRE (x VARCHAR2) ;
FUNCTION FUN_NOMBRE RETURN NUMBER;
END PKG_MYPKG;
CREATE PACKAGE BODY PKG_MYPKG IS
FUNCTION FUN_NOMBRE RETURN NUMBER IS
BEGIN
-- Instrucciones
END;
PROCEDURE PRO_NOMBRE (x VARCHAR2) ;
IS
BEGIN
-- Instrucciones
END;
END PKG_MYPKG;
37
VISTAS MATERIALIZADAS
Una vista materializada se define como una vista comn, pero en lugar de
almacenar la definicin de la vista, almacena el resultado de la consulta, es decir,
la materializa, como un objeto persistente en la base de datos.
Sintaxis:
CREATE MATERIALIZED VIEW nombrevistamaterializada
AS subconsulta;
38
VISTAS
El objeto vista es una alternativa para mostrar datos de una o varias tablas; es
como una tabla virtual que almacena una consulta. Los datos accesibles a travs
de la vista no estn almacenados en la base de datos, en la base de datos se
guarda la definicin de la vista y no el resultado de ella. Entonces, una vista
almacena una consulta como un objeto para utilizarse posteriormente.
Su uso es bsicamente para restringir el acceso a la base de datos y para realizar
consultas complejas fcilmente.
Sintaxis:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias[, alias]...)]
AS subquery
39
TABLAS TEMPORALES
Oracle permite la creacin de tablas temporales para mantener datos propios y exclusivos a
una sesin de Oracle determinada. Estos datos permanecern en el sistema slo durante el
tiempo que dure la transaccin o sesin involucrada. No obstante, al igual que para las tablas
permanentes, la definicin de las tablas temporales se almacena en las tablas del sistema.
Asimismo, si ejecutamos una sentencia TRUNCATE sobre una tabla temporal, los datos que
se truncarn sern los de la propia sesin desde la que se ejecuta la sentencia. Los datos que
hayan podido ser insertados desde otras sesiones que estn utilizando la misma tabla, no se
vern
afectados
por
la
sentencia TRUNCATE.
Los datos de una tabla temporal Oracle se borran automticamente en el caso de que la
sesin termine, bien porque el usuario desconecte, bien porque la sesin termine de una de
manera
anormal
al
producirse
algn
tipo
de
fallo.
Las tablas temporales admiten la creacin de ndices. Dichos ndices, como las tablas, son
tambin temporales, y los datos en el ndice permanecen en el sistema mientras la tabla
temporal
existe.
Tambin se pueden crear vistas y triggers sobre tablas temporales.
40
SINONIMO
Un sinnimo es un nombre alternativo que identifica un tabla en la base de datos. Con un sinnimo se
pretende normalmente simplificar el nombre original de la tabla, aunque tambin se suelen utilizar para
evitar tener que escribir el nombre del propietario de la tabla.
Sintaxis:
CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema .] synonym_name
FOR [schema .] object_name [@ dblink];
ejemplo:
CREATE PUBLIC SYNONYM sinonimo_publico FOR tabla
para permiso de acceso al esquema de destino debemos ejecutar, desde el esquema del usuario origen:
GRANT SELECT, UPDATE, DELETE, INSERT ON nombre _tabla FOR usuario (esquema)
41
DB LINK
42
CONCURRENCIA
La concurrencia, o el acceso simultneo a los mismos datos por parte de muchos
usuarios. Sin los controles de concurrencia adecuados, los datos podran ser
modificados o cambiados de manera no apropiada, haciendo peligrar la integridad
de datos.
Si mucha gente est accediendo a los mismos datos, una manera de manejar la
concurrencia de datos es hacer que cada usuario espere su turno. El objetivo de
un SGBD es reducir esta espera de forma que sea insignificante o inexistente para
cada usuario.
43
CONCURRENCIA
Los bloqueos se usan para conseguir dos importantes objetivos de las bases de
datos:
Consistencia, que asegura que los datos que est viendo o modificando un
usuario no es modificado (por otros usuarios) hasta que el usuario termine de
utilizar los datos.
Integridad, que asegura que los datos y estructuras de la base de datos reflejan
todos los cambios realizados sobre ellos en la secuencia correcta.
Los bloqueos garantizan la integridad de datos, al tiempo que permiten el mximo
acceso concurrente a los datos por parte de un nmero ilimitado de usuarios.
44