You are on page 1of 6

1. Conectarse a su Base de Datos con SQL*PLUS como usuario HR.

2. Crear una tabla temporal como sigue:


create global temporary table tmp_emps on commit preserve
rowsas select * from employees where 1=2;
3. Insertar algunas filas y confirmarla:
insert into tmp_emps select * from employees where
department_id=30;
commit;
4. Iniciar una segunda sesin SQL*PLUS como HR.
5. En la segunda sesin, confirme que el primer insert no es visible, incluso aun confirmado, e
inserte algunas filas diferentes:
select count(*) from tmp_emps;
insert into tmp_emps select * from employees where
department_id=50;
commit;
6. En la primer sesin, truncar la tabla:
truncate table tmp_emps;
7. En la segunda sesin, confirmar que todava hay filas en esa sesin copia de la tabla:
select count(*) from tmp_emps;
8. En la segunda sesin, demostrar que terminando la sesin se borran las filas. Para ello ser
necesario desconectar y conectar de nuevo:
disconnect;
connect hr/hr
select count(*) from tmp_emps;
9. Ordenar el medio ambiente al dejar caer las tablas, ya sea con SQL * Plus
drop table tmp_emps;
drop table ex_emps;
o con Database Contro. Los ndices y Constraint tiene que se han eliminado tambin.

DENTRO DEL EXAMEN


Los objetivos del examen para el primer examen OCP especifica solo el conocimiento de tablas
permanentes y temporales, ndices y Constraint. Sin embargo, los candidatos tambin se puede
esperar que estn familiarizados con vistas, sequencias y synonymous. Los seis de estos objetos
de esquemas son cubiertos en el primer examen SQL: los exmenes DBA asumen que los
candidatos tiene ya pasado este.
La sintaxis para la gestin de objetos de esquema puede ser muy incmodo. Por esta razn,
puede ser tentador utilizar los asistentes en la base de datos de control para crear y modificar
objetos. Esto est bien, si siempre haga clic en el botn Mostrar SQL para ver las instrucciones
SQL generadas por los asistentes. La sintaxis se pondr a prueba, y es vital que est
familiarizado con l.

RESUMEN DE CERTIFICACION.
Los datos son almacenados en tablas. Asociado a las tablas son los Constraints que controlan la
estructura relacional de las tablas de la Base de Datos, que son definidas por medio de
Constraints Foreign, Unique y Primary Key. Junto con los Constraints Check (incluyendo el
Constraint Not Null), estos pueden hacer cumplir las reglas de negocio.
Los Constraint puede ser forzadas o en suspendido, y si se aplican hay control sobre el
momento que se comprueban. Por defecto, todos los Constraints son forzados y comprueban en
tiempo de ejecucin de la declaracin. Una violacin al Constraint por lo tanto causara que la
declaracin sea regresada.
Los ndices tienen una doble funcin: hacer cumplir Constraints Foreign, Unique y Primary Key,
y para mejorar el rendimiento de consultas. La creacin puede ser automtica: provocada por la
creacin de un Constraint. Sin embargo, si los ndices son definidos manualmente hay varias
opciones que levan a hacer tiles.
Tablas temporales trabajan en muchas maneras como las tablas temporales. Pero los datos en
ellas es privado para la sesin. Debido a que no existen como segmentos en un espacio de
tablas permanente, pero slo en el PGA sesiones y en los segmentos temporales en un espacio
de tablas temporales, las operaciones en ellos son mucho ms rpidos.

DOS MINUTOS

Crear y Modificar Tablas.


Las tablas son objetos de esquema, comparten un namespace con vistas y synonyms.
Despus de la creacin, definiciones de columnas puede ser agregadas, eliminadas y
modificadas.

Gestionando Constraints.
Un Constraints puede ser definido en tiempo de creacin de la tabla, o agregado
posteriormente.
Un Primary Key es funcionalmente equivalente a Unique Plus Not Null.
Un Constraints Unique no para la insercin de muchos valores nulos.
Constraint Foreign Key define la relacin entre dos tablas.

Crear ndices.
Los ndices son requisito para hacer cumplir Constraints Unique y Primary Key.
NULL no son incluidos en un ndice B*TREE pero son incluidos en un ndice Bitmap.
ndices B*TREE pueden ser Unique o Non-Unique, que determina si puede aceptar valores
llaves duplicados.
ndices B*TREE son adecuados para columnas de alta cardinalidad, ndices Bitmap para
columnas de baja cardinalidad.
Indices Bitmaps pueden ser Compound, function based, or descending; indices B*TREE
tambien pueden ser unique, compress y reverse key.

Crear y Usar Tablas Temporales.


Filas en una tabla temporales son visibles solo a la sesin que los inserto.
DML sobre tablas temporales no generan redo.
Tablas temporales existen solo en la PGA de la sesin o en un segmento temporal.
Una tabla temporal puede mantener las filas de la duracin de una sesin o de una
transaccin, dependiendo de cmo se cre.
Los cursores explicitos se emplean para realizar consultas SELECT que pueden devolver cero filas,
o ms de una fila.

Para trabajar con un cursor explicito necesitamos realizar las siguientes tareas:

Declarar el cursor.

Abrir el cursor con la instruccin OPEN.

Leer los datos del cursor con la instruccin FETCH.

Cerrar el cursor y liberar los recursos con la instruccin CLOSE.

Para declarar un cursor debemos emplear la siguiente sintaxis:

CURSOR nombre_cursor IS
instruccin_SELECT

Tambin debemos declarar los posibles parametros que requiera el cursor:

CURSOR nombre_cursor(param1 tipo1, ..., paramN tipoN) IS


instruccin_SELECT

Para abrir el cursor

OPEN nombre_cursor;
o bien (en el caso de un cursor con parmetros)
OPEN nombre_cursor(valor1, valor2, ..., valorN);

Para recuperar los datos en variables PL/SQL.

FETCH nombre_cursor INTO lista_variables;


-- o bien ...
FETCH nombre_cursor INTO registro_PL/SQL;

Para cerrar el cursor:

CLOSE nombre_cursor;

El siguiente ejemplo ilustra el trabajo con un cursor explicito. Hay que tener en cuenta que al leer
los datos del cursor debemos hacerlo sobre variables del mismo tipo de datos de la tabla (o tablas)
que trata el cursor.
DECLARE
CURSOR cpaises
IS
SELECT CO_PAIS, DESCRIPCION, CONTINENTE
FROM PAISES;

co_pais VARCHAR2(3);
descripcion VARCHAR2(50);
continente VARCHAR2(25);
BEGIN
OPEN cpaises;
FETCH cpaises INTO co_pais,descripcion,continente;
CLOSE cpaises;
END;

Podemos simplificar el ejemplo utilizando el atributo de tipo %ROWTYPE sobre el cursor.

DECLARE
CURSOR cpaises
IS
SELECT CO_PAIS, DESCRIPCION, CONTINENTE
FROM PAISES;

registro cpaises%ROWTYPE;
BEGIN
OPEN cpaises;
FETCH cpaises INTO registro;
CLOSE cpaises;
END;

El mismo ejemplo, pero utilizando parmetros:

DECLARE
CURSOR cpaises (p_continente VARCHAR2)
IS
SELECT CO_PAIS, DESCRIPCION, CONTINENTE
FROM PAISES
WHERE CONTINENTE = p_continente;

registro cpaises%ROWTYPE;
BEGIN
OPEN cpaises('EUROPA');
FETCH cpaises INTO registro;
CLOSE cpaises;
END;

Cuando trabajamos con cursores debemos considerar:


Cuando un cursor est cerrado, no se puede leer.

Cuando leemos un cursor debemos comprobar el resultado de la lectura utilizando los


atributos de los cursores.

Cuando se cierra el cursor, es ilegal tratar de usarlo.

Es ilegal tratar de cerrar un cursor que ya est cerrado o no ha sido abierto

Atributos de cursores

Toman los valores TRUE, FALSE o NULL dependiendo de la situacin:

DECLARE
CURSOR cpaises
IS
SELECT CO_PAIS, DESCRIPCION, CONTINENTE
FROM PAISES;

co_pais VARCHAR2(3);
descripcion VARCHAR2(50);
continente VARCHAR2(25);
BEGIN
OPEN cpaises;
FETCH cpaises INTO co_pais,descripcion,continente;
WHILE cpaises%found
LOOP
dbms_output.put_line(descripcion);
FETCH cpaises INTO co_pais,descripcion,continente;
END LOOP;
CLOSE cpaises;
END;

Cursor implicito

Con cada cursor implicito 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.

Los cursores implicitos solo pueden devolver una nica fila. En caso de que se devuelva ms
de una fila (o ninguna fila) se producir una excepcion. No se preocupe si an no sabe que es
una excepcion, le valdr conocer que es el medio por el que PL/SQL gestiona los errores.
El siguiente ejemplo muestra un cursor implicito:

declare
vdescripcion VARCHAR2(50);
begin
SELECT DESCRIPCION
INTO vdescripcion
from PAISES
WHERE CO_PAIS = 'ESP';

dbms_output.put_line('La lectura del cursor es: ' || vdescripcion);

end;

La salida del programa generara la siguiente lnea:

La lectura del cursor es: ESPAA

You might also like