Así que para empezar, creamos la tabla ARTICULOS, donde como restricciòn es una sola, donde una fila recibe PK, por lo que no es necesario hacer una linea especificando el CONSTRAINT.
create table ARTICULOS( refart char(4) primary key, descripcion varchar2(30), precio number(8,2), codiva number(1), categoria char(10), cantalm number(5) );
A continuación creamos la tabla CLIENTES, donde empezamos a agregar restricciones sobre las columnas.
create table CLIENTES(
numcli number(4) constraint CLIENTES_PK primary key constraint CLINETES_NUMCLI_CK check(numcli>0), nomcli varchar2(30) constraint CLIENTES_NOMCLI_NN not null, direccli varchar2(30), cod_postal number(4) constraint CLIENTES_CODPOSTAL_CK check(cod_postal between 1000 and 9999), ciudad char(30) );
Creamos nuestra tabla de PEDIDOS que estará relacionada con la tabla de CLIENTES y sus debidas restricciones.
create table PEDIDOS( numped number(6), numcli number(4), fechaped date, estadoped char(2), constraint PK_PEDIDOS primary key(numped), constraint FK_PEDIDOS_CLIENTES foreign key (numcli) references CLIENTES(numcli), constraint CK_PEDIDOS_ESTADO check (estadoped in ('EC','SU','SE')) );
Por último creamos la tabla LINPED
create table LINPED( numped number(6) constraint FK_LINPED references PEDIDOS(numped), numlin number(2) constraint CK_LINPED_NUMLIN check (numlin>0), refart char(4) constraint FK_NUMLI references ARTICULOS(refart), cantped number(5), constraint PK_LINPED primary key (numped,numlin) );
Les comento que el libro, directamente pasa a mostrar como se crean las tablas, no tiene un texto de introducción de tal manera que uno las puedra crear como imagina que puden ser y después comparar.
Columna virtual
Oracle, a partir de la versión 11, implementa esta columna virtual con la siguiente sintaxis:
nombrecolumna [tipo] [GENERATED ALWAYS] AS (expresión) [VIRTUAL] [restricción_columna]
De tal manera que si no se especifica un tipo de datos, Oracle lo determinará a partir de la expresión .
Ej : En el caso de volver a crear otra tabla de ARTICULOS .
*Puede crearla como ARTICULOS2 y despues la eliminan con DROP ARTICULOS2
create table ARTICULOS( refart char(4) primary key, description varchar2(30), precsiniva number(8,2), iva number(4,2), precconiva number(8,2) AS (precsiniva+round(precsiniva*iva/100,2)) );
Luego insertan estos dos valores:
insert into articulos2(refart,description,precsiniva,iva) values('xT10','Lapiceras',10,16); insert into articulos2(refart,description,precsiniva,iva) values('AD23','Computadoras',10,7);
Y para finalizar hacen un SELECT .
SELECT refart, description,iva,precsiniva,precconiva
Eliminación de tablas
Para su eliminación, el tan conocido DROP.
La claúsula CASCADE CONSTRAINTS permite borrar aquellas que tablas que hacen referencia a claves primarias de otras tablas.
Y la claúsula PURGE elímina fisicamente la tabla, ya que de otra manera se elimina lógicamente, por eso a través de FLASHBACK NOMBRETALA; se puede recuperar.
Por lo cual la sintaxis queda :
DROP TABLE nombre [CASCADE CONSTRAINTS] [PURGE]
Sintaxis del FLASHBACK :
FLASHBACK TABLE NOMBRETALA TO BEFORE DROP;
Modificación de una tabla
a. Adición o modificaciòn de columnas
ALTER TABLE nombretabla {ADD/MODIFY} (columna tipo[restriccion, ... ]) alter table CLIENTES ADD (TEL char(14)); alter table CLIENTES MODIFY (TEL char(6));
b. Adición de una restricción de tabla
ALTER TABLE nombretala ADD {CONSTRAINT nombre} restricción alter table ARTICULOS ADD CONSTRAINT ARTICULOS_PRECIO_CK check(precio>=0);
En el momento que queremos añadir una restricción, el motor de Oracle se encarga de verificar que todas los datos cumplan, de caso contrario, no se aplica .
El libro aconseja seguir los siguientes pasos:
*Crear la tabla
*Crear las restricciones de clave primaria
*Crear las restricciones de clave ajena
*Crear las restricciones de validaciòn
c. Eliminanaciòn de una restricciòn
ALTER TABLE nombretala DROP {PRIMARY/UNIQUE (columna)/CONSTRAINT} nombre alter table ARTICULOS drop constraint ARTICULOS_PRECIO_CK;
Sin la necesidad de eliminar, se pueden activar/desactivar las constraints a través de :
d. ALTER TABLE nombretabla [ENABLE VALIDATE/ENABLE NOVALIDATE/DISABLE] nombre_restriccion
ENABLE VALIDATE : Activa la restricciòn si los datos que ya se encuentran en la tabla, cumplen con la misma.
ENABLE NOVALIDATE : Activa la restricciòn para los datos que se van a ingrear a partir de ese momento, no importan los anteriores.
DISABLE : Desactiva la restricciòn .
e. Modificaciòn del estado de restricciones
ALTER TABLE nombretala MODIFY CONSTRAINT nombrerestristrccion estado;
DEFERRABLE : La validaciòn se realiza al finalizar la transacciòn .
NOT DEFERRABLE : La restricciòn se verifica al completar cada instrucciòn DML(por defecto).
INITIALLY IMMEDIATE : Consiste en verificar la restricciòn al completar cada instrucción DML (por defecto).
INITIALLY DEFFERED : Implica que la restricciòn esta en modo DEFERRABLE.
RELY o NORELY : Permite indicar que Oracle puede tener en cuenta una restricciòn en modo NOVALIDATE.
USING INDEX : Permite especificar los parámetros de los índices utilizados para establecer las restricciones de PK y UQ .
f. Eliminaciòn de columnas
ALTER TABLE nombretabla DROP COLUMN nombrecolumna; (nombrecolumna,nombrecolumna2,...)
Utilizando el DROP, recupero el espacio físico.
Otra manera es deshabilitarlos a través de :
ALTER TABLE nombretabla SET UNUSED (nombrecolumna1,nombrecolumna2,...);
Y luego elimino todos aquellos que esten UNUSED
ALTER TABLE nombretabla DROP UNUSED COLUMNS [CHECKPOINT num_filas];
Para saber que tablas contienen columnas no utilizables, se consulta la tabla
USER_UNUSED_COL_TABS.
g. Cambiar de nombre
RENAME nombre_antiguo TO nombre_nuevo
Se aplica tanto para Tablas, vistas, secuencias y sinónimos privados .
h. Hacer un tabla de solo lectura o lectura/escritura
ALTER TABLE nombretala {READ ONLY/READ WRITE}
OJO : Por más que este en estado de SOLO LECTURA, la tabla se puede eliminar ... Yo me di cuenta antes de poder leerlo jaja .
Volviendo a los FLASHBACK ....
Es posible volver a través de FLASHBACK TABLE a una hora determinada y esto es añadindo la setencia ENABLE ROW MOVEMENT :
CREATE TABLE (...) ENABLE ROW MOVEMENT; ALTER TABLE NOMBRETALA ENABLE ROW MOVEMENT; FLASHBACK TABLE nombretabla TO_TIMESTAMP fechaHora;
Gestión de índices
Oracle los utiliza implícitamente, por más que no los creemos .
Los índices sirven para mejorar el rendimiento de las consultas.
CREATE INDEX nombre ON tabla (columna [DESC], ...) DROP INDEX nombre
Esto fue todo por hoy, la verdad que costó un poco resumir esto en el horario de trabajo, pero esta bueno, que haya explicado bien profundo, había cosas que yo no sabía, así que me sirvió para aprender y como repaso !
Saludos y hasta la próxima entrega !


No hay comentarios:
Publicar un comentario