Está en la página 1de 7

CREAR Y MANEJAR TABLAS

La tabla es la estructura básica de almacenamiento de datos en


Oracle. Una tabla puede verse como una hoja de cálculo con filas y
columnas. La información necesaria para crear una tabla es:
- Nombre para identificarla
- Columnas de la tabla

Ejemplo:

CREATE TABLE products (


PROD_ID NUMBER(4),
PROD_NAME VARCHAR2(20),
STOCK_QTY NUMBER(15, 3)
);

La tabla products está creada bajo el usuario (esquema) conectado a


la base de datos. Si queremos crearla en otro esquema, se debe
especificar al crear la tabla.
La definición de las columnas está entre paréntesis. Un tipo de dato
debe ser especificado para cada columna. Las columnas están
separadas por comas.

Tipos de datos que podemos utilizar en las tablas

1. CHAR. Alfanumérico de longitud fija. La longitud será 1 si no se


especifica. Añade espacios en blanco a la derecha
2. VARCHAR. Igual que VARCHAR2
3. VARCHAR2. Variable alfanumérica de longitud no fija. Hay que
especificarle un valor de longitud. En una tabla puede
almacenar hasta 4000 caracteres
4. NCHAR. Igual que CHAR, pero con soporte a caracteres
internacionales (National Language Support o NLS)
5. NVARCHAR2.
6. LONG. Alfanumérico hasta 2GB. No utilizar. Mejor CLOB
7. NUMBER. Almacena números en coma flotante. Se le pueden
especificar 2 cifras:
i. Precisión. Longitud del número incluyendo
decimales
ii. Escala. Número de decimales
8. DATE. Almacena fechas. Siglo, año, mes, día, hora, minutos y
segundos. Puede ser visualizado en diferentes formatos
9. RAW. Almacena información no estructurada. Mejor utilizar
BLOBS o BFILES. Almacena hasta 4000B
10. LONG RAW. Igual que RAW, pero almacena hasta 2GB
11. BLOB. Hasta 4GB de información binaria no estructurada
12. CLOB. Hasta 4GB de caracteres
13. NCLOB
14. BFILE. Información binaria en un fichero fuera de la base de
datos
15. ROWID. Binario que representa la dirección física de la fila
16. UROWID. Dirección física, lógica o externa de la fila

Se pueden especificar constraints a nivel de tabla o a nivel de


columna cuando se crea una tabla.

COLUMNA  NOT NULL (por ejemplo)

Cuando se crea o se altera una tabla, se pueden especificar valores


por defecto para las columnas
• Se insertará el valor por defecto si el valor de la columna al
insertar no se ha especificado
• Debe satisfacer las características de la columna
• Si no hay valor por defecto, este será nulo
• No se pueden poner como valores por defecto seudo columnas
como LEVEL, NEXTVAL, ROWNUM, …
• Los valores por defecto posibles incluyen SYSDATE, USER,
USERENV y UID

CREATE TABLE orders (


ORDER_NUMBER NUMBER(8) NOT NULL,
STATUS VARCHAR2(10) DEFAULT ‘PENDING’,
TORDER DATE DEFAULT SYSDATE
);

Las siguientes vistas del diccionario de datos nos dan información


sobre las tablas y las columnas:
• DBA_TABLES  Todas las tablas de la base de datos
• DBA_ALL_TABLES  Todos los objetos y tablas de la base de
datos
• USER_TABLES  Tablas propiedad del usuario
• USER_ALL_TABLES
• ALL_TABLES  Todas las tablas accesibles por el usuario
• ALL_ALL_TABLES  Objetos y tablas accesibles por el usuario
• DBA_TAB_COLUMNS  Todas las columnas de la base de datos
• USER_TAB_COLUMNS  Columnas propiedad del usuario
• ALL_TAB_COLUMNS  Columnas accesibles por el usuario
Convenciones de nombres

• El nombre debe ser tan descriptivo como sea posible


• Hasta 30 caracteres
• Debe empezar por una letra
• Puede contener letras, números y caracteres especiales ($, # Y
_)
• CASE_SENSITIVE

La instrucción:

CREATE TABLE MiTabla (


Column_1 NUMBER,
Column_2 CHAR
);

Creará una tabla que se almacenará en el repositorio como MITABLA.


Si efectuamos una búsqueda del estilo de:

Select * from all_tables where table_name = ‘MiTabla’

No nos devolverá ningún valor. La búsqueda debe ser del tipo

Select * from all_tables where table_name = ‘MITABLA’

En cambio, si creamos la tabla de la forma:

CREATE TABLE “MiTabla” (


“Column_1” NUMBER,
“Column_2” CHAR
);

Se creará una tabla que se almacenará en el repositorio como


MiTabla.

Es una buena práctica tener los objetos en orden. Esto es, que los
objetos estén ligados por el nombre con la tabla a la cuál estén
asociados. Por ejemplo, si la tabla se llama empleados:
• Primary key  PK_EMPLEADOS
• Índices  EMPLEADO_NDX1
• Check constraints  CK_EMPLEADOS_ESTADO
• Triggers  TRG_EMPLEADO

Se puede documentar añadiendo comentarios:


COMMENT ON TABLE MITABLA IS ‘Este es un comentario’;

COMMENT ON COLUMN MITABLA.COLUMN1 IS ‘Este es un


comentario’;

Las palabras reservadas de Oracle no pueden utilizarse como


nombres de tabla o de columna. Se pueden utilizar si están
entre comillas dobles (“”)

Crear una tabla a partir de otra tabla

Se puede crear una tabla usando una query basada en una o más
tablas ya existentes. El tipo de la tabla y el tamaño viene
determinado por el resultado de la consulta.

CREATE TABLE emp AS SELECT * FROM empleados; Copiaremos,


además de la estructura de la tabla, todas sus filas

CREATE TABLE emp AS SELECT * FROM empleados WHERE 1 = 2;


Copiaremos sólo la estructura.

Podemos utilizar alias, con lo cuál cambiaremos el nombre de las


columnas de la tabla que hemos creado

CREATE TABLE ciudad AS


SELECT nombre nombre_ciudad,
Codigo codigo_ciudad
FROM areas_geograficas
WHERE tipo = “ciudad”;

No se puede crear una tabla de esta forma si una de las


columnas es de tipo LONG
Las únicas constraints que se copian son las NOT NULL
Modificar definición de tablas

Añadir una columna

ALTER TABLE [schema.]table_name ADD column_definitions;

Por defecto, los nuevos valores serán nulos.

ALTER TABLE orders ADD order_date DATE;

Si añadimos más de una columna, las definiciones de columna deben


estar entre paréntesis y separadas con comas. Si especificamos un
DEFAULT, todas las filas de la tabla tendrán el valor por defecto
automáticamente.

ALTER TABLE orders ADD (


Qty NUMBER(13,3),
Dupd DATE DEFAULT sysdate
);

Cuando se añade una columna, no se puede especificar la constraint


NOT NULL si la tabla tiene filas. Pasos
• Modificar la tabla
• Asignar un valor a cada elemento
• Añadir constraint NOT NULL

Modificar una columna

ALTER TABLE [schema.]table_name MODIFY column_name


new_attributes;

Para modificar más de una columna, se debe poner entre paréntesis:

ALTER TABLE orders MODIFY (


Qty NUMBER(10,3),
Status VARCHAR2(15)
);

Reglas para modificar la definición de una columna:


1. Podemos aumentar siempre la longitud de los tipos carácter y
la precisión de las columnas numéricas
2. Para reducir la longitud la longitud de una columna, esta no
debe contener valores. Todos sus valores deben estar a NULL
3. Se puede incrementar o reducir las plazas decimales de un
NUMBER sin reducir la precisión, aunque los valores sean no
nulos
4. Una columna debe estar a NULL para cambiar su tipo de datos.
Si no se cambia la longitud, se puede pasar de CHAR a
VARCHAR2 o viceversa, aunque la columna no esté vacía

Eliminar una columna

Se puede:
1. Eliminar una columna
2. Marcarla como no-usada para eliminarla posteriormente

ALTER TABLE [schema.]table_name DROP {COLUMN column_name |


(column_names)} [CASCADE CONSTRAINTS];

Se pueden eliminar tantas columnas como sea necesario. Se separan


por comas, y están entre paréntesis. Los índices y las constraints que
están asociadas a las columnas borradas también se eliminan. Se
debe especificar CASCADE CONSTRAINT si la columna borrada forma
parte de una constraint multicolumna.

Marcar como no usada para borrarla posteriormente

ALTER TABLE orders SET UNUSED COLUMN update_dt;

Si hacemos un DESCRIBE, la columna no aparecerá.

ALTER TABLE [schema.]table_name DROP {UNUSED COLUMNS |


COLUMNS CONTINUE}

Usaremos la opción COLUMNS CONTINUE si lo que queremos es


continuar un proceso de borrado que hemos tenido que interrumpir.

ALTER TABLE orders DROP UNUSED COLUMNS;

Las columnas no usadas están en las vistas de tipo


ALL_UNUSED_COL_TABS.

Borrar / Renombrar tablas

DROP TABLE [schema.]table_name [CASCADE CONSTRAINTS];


Eliminamos:
- La tabla
- Datos y definición
- Índices
- Constraints
- Triggers

No eliminamos:
- Vistas que acceden a la tabla (aunque se marcan como
inválidas)
- Procedimientos y funciones. También se marcan como inválidos

Si especificamos CASCADE CONSTRAINTS, se eliminarán todos los


registros que apunten a la clave primaria de esta tabla.

La instrucción RENAME sirve para cambiar el nombre de una tabla,


vista, sinónimo, procedimiento, función, etc.

RENAME nombre_viejo TO nombre_nuevo

Donde son nombres de: tablas, vistas, sinónimos privados o


secuencias.

Sólo se pueden renombrar los objetos de los que somos


propietarios

Truncar una tabla

Cuando truncamos una tabla, el espacio que ocupan sus datos y sus
índices es liberado. Si sólo queremos borrar los datos, pero no liberar
el espacio, debemos incluir la cláusula REUSE STORAGE. No se puede
volver atrás un truncate, ni seleccionar las filas a truncar

TRUNCATE {TABLE | CLUSTER} [schema.]name [{DROP | REUSE }


STORAGE]

No podemos truncar una tabla si existe una clave externa que la


apunte, aunque esté vacía.

TRUNCATE TABLE TABLA;

Truncar una tabla es más rápido que borrarla, ya que no tiene que
escribir en el segmento de rollback.

También podría gustarte