Sesión 10 - Manual de Oracle - Texto 8

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 42

Objetivos

En esta lección, se ofrece una introducción a las sentencias de lenguaje de definición de datos (DDL).
Aprenderá los fundamentos para crear tablas simples, modificarlas y eliminarlas. Se muestran los
tipos de dato disponibles en DDL y se ofrece una introducción sobre los conceptos de esquema. Las
restricciones se tratarán en esta lección. Se muestran y explican los mensajes de excepción generados
por las restricciones de violación durante las operaciones DML.

Oracle Database: Conceptos Fundamentales de SQL I 10-2


Oracle Database: Conceptos Fundamentales de SQL I 10-3
Objetos de Base de Datos
Oracle Database puede contener varias estructuras de datos. Cada estructura se debe describir en el
diseño de la base de datos para que se pueda crear durante la fase de creación del desarrollo de la
base de datos.
• Tabla: almacena datos.
• Vista: subjuego de datos de una o más tablas.
• Secuencia: genera valores numéricos.
• Índice: mejora el rendimiento de algunas consultas.
• Sinónimo: ofrece nombres alternativos para un objeto.
Estructuras de Tabla de Oracle
• Las tablas se pueden crear en cualquier momento, incluso mientras los usuarios utilizan la base
de datos.
• No necesita especificar el tamaño de la tabla. El tamaño se define en última instancia según la
cantidad de espacio asignado a la base de datos completa. No obstante, es importante calcular la
cantidad de espacio que utilizará una tabla a lo largo del tiempo.
• La estructura de la tabla se puede modificar en línea.
Nota: hay más objetos de base de datos disponibles, pero no se tratan en este curso.

Oracle Database: Conceptos Fundamentales de SQL I 10-4


Reglas de Nomenclatura
Las tablas y columnas de la base de datos se deben nombrar según las reglas estándar de
nomenclatura de objetos de Oracle Database:
• Los nombres de tabla y de columna deben comenzar por una letra y tener entre 1 y 30 caracteres.
• Los nombres sólo deben contener los caracteres A–Z, a–z, 0–9, _ (subrayado), $ y # (caracteres
válidos, pero cuyo uso no es aconsejable).
• Los nombres no deben ser un duplicado de otro nombre de objeto propiedad del mismo usuario
del servidor de Oracle.
• Los nombres no deben ser una palabra reservada del servidor de Oracle.
- Puede utilizar identificadores entre comillas para representar el nombre de un objeto. Un
identificador entre comillas empieza y finaliza con comillas dobles (""). Si asigna un
nombre a un objeto de esquema mediante un identificador entre comillas, debe utilizar las
comillas dobles cuando haga referencia a dicho objeto. Los identificadores entre comillas
pueden ser palabras reservadas, aunque no se recomienda.

Oracle Database: Conceptos Fundamentales de SQL I 10-5


Reglas de Nomenclatura (continuación)
Directrices de Nomenclatura
Utilice nombres descriptivos para las tablas y otros objetos de la base de datos.
Nota: los nombres no son sensibles a mayúsculas/minúsculas. Por ejemplo, EMPLOYEES se
considera el mismo nombre que eMPloyees o eMpLOYEES. Sin embargo, los identificadores entre
comillas son sensibles a mayúsculas/minúsculas.
Para obtener más información, consulte la sección sobre nombres de objeto de esquema y
cualificadores en Oracle Database SQL Language Reference (Referencia sobre Lenguaje SQL de
Oracle Database) para la base de datos 10g u 11g.

Oracle Database: Conceptos Fundamentales de SQL I 10-6


Oracle Database: Conceptos Fundamentales de SQL I 10-7
Sentencia CREATE TABLE
Puede crear tablas para almacenar datos ejecutando la sentencia SQL CREATE TABLE. Esta
sentencia es una de las sentencias DDL, que son un subjuego de sentencias SQL que se utilizan para
crear, modificar o eliminar estructuras de Oracle Database. Estas sentencias tienen un efecto
inmediato en la base de datos y registran información en el diccionario de datos.
Para crear una tabla, un usuario debe tener el privilegio CREATE TABLE y un área de
almacenamiento en la que crear los objetos. El administrador de la base de datos (DBA) utiliza
sentencias de lenguaje de control de datos (DCL) para otorgar privilegios a los usuarios.
En la sintaxis:
schema es el mismo nombre que el del propietario
table es el nombre de la tabla
DEFAULT expr especifica un valor por defecto si se omite un valor en la sentencia
INSERT
column es el nombre de la columna
datatype es el tipo de dato y la longitud de la columna

Oracle Database: Conceptos Fundamentales de SQL I 10-8


Referencia a Tablas de Otro Usuario
Un esquema es una recopilación de estructuras lógicas de datos u objetos de esquema. Un esquema
es propiedad de un usuario de base de datos y tiene el mismo nombre que el usuario. Cada usuario es
propietario de un único esquema.
Los objetos de esquema se pueden crear y manipular con SQL e incluyen tablas, vistas, sinónimos,
secuencias, procedimientos almacenados, índices, clusters y enlaces de base de datos.
Si una tabla no pertenece al usuario, el nombre del propietario se debe anteponer a la tabla. Por
ejemplo, dados los esquemas USERA y USERB y ambos contienen la tabla EMPLOYEES, si USERA
desea acceder a la tabla EMPLOYEES que pertenece a USERB, USERA debe anteponer el nombre del
esquema al nombre de la tabla:
SELECT *
FROM userb.employees;
Si USERB desea acceder a la tabla EMPLOYEES propiedad de USERA, USERB debe anteponer el
nombre del esquema al nombre de la tabla:
SELECT *
FROM usera.employees;

Oracle Database: Conceptos Fundamentales de SQL I 10-9


Opción DEFAULT
Al definir una tabla, puede especificar que se proporcione un valor por defecto a una columna
mediante la opción DEFAULT. Esta opción evita que se introduzcan valores nulos en las columnas si
se inserta una fila sin un valor para la columna. El valor por defecto puede ser un literal, una
expresión o una función SQL (como SYSDATE o USER), pero el valor no puede ser el nombre de
otra columna o una pseudocolumna (como NEXTVAL o CURRVAL). La expresión por defecto debe
coincidir con el tipo de dato de la columna.
Considere los siguientes ejemplos:
INSERT INTO hire_dates values(45, NULL);
La sentencia anterior insertará el valor nulo en lugar del valor por defecto.
INSERT INTO hire_dates(id) values(35);
La sentencia anterior insertará SYSDATE para la columna HIRE_DATE.
Nota:en SQL Developer, haga clic en el icono Run Script o pulse [F5] para ejecutar las sentencias
DDL. Los comentarios se mostrarán en la página con separadores Script Output.

Oracle Database: Conceptos Fundamentales de SQL I 10-10


Creación de Tablas
El ejemplo de la diapositiva crea la tabla DEPT, con cuatro columnas: DEPTNO, DNAME, LOC y
CREATE_DATE. La columna CREATE_DATE tiene un valor por defecto. Si no se proporciona
ningún valor para una sentencia INSERT, se inserta automáticamente la fecha del sistema.
Para confirmar que se ha creado la tabla, ejecute el comando DESCRIBE.
Puesto que la creación de una tabla constituye una sentencia DDL, se realiza una confirmación
automática al ejecutar esta sentencia.
Nota: puede ver la lista de las tablas que posee consultando el diccionario de datos. Por ejemplo:
select table_name from user_tables
Mediante las vista de diccionario de datos, puede obtener información sobre otros objetos de base de
datos como vistas, índices, etc. Los diccionarios de datos se explican en detalle en el curso Oracle
Database: Conceptos Fundamentales de SQL II.

Oracle Database: Conceptos Fundamentales de SQL I 10-11


Oracle Database: Conceptos Fundamentales de SQL I 10-12
Tipos de Dato
Al identificar una columna para una tabla, debe proporcionar un tipo de dato para la columna. Hay
varios tipos de dato disponibles:
Tipo de Dato Descripción
VARCHAR2(size) Datos de caracteres de longitud variable (Se debe especificar un
tamaño máximo: el tamaño mínimo es 1 y el máximo es 4.000).
CHAR [(size)] Datos de caracteres de longitud fija de tamaño de bytes (El
tamaño por defecto y mínimo es 1; el tamaño máximo es 2.000).
NUMBER [(p,s)] Número con la precisión p y la escala s (La precisión es el número
total de cifras decimales y la escala el número de dígitos a la
derecha del punto decimal; la precisión puede oscilar entre 1 y 38
y la escala entre –84 y 127).
DATE Valores de fecha y hora hasta el segundo más cercano entre el 1
de enero, 4712 a. C., y el 31 de diciembre, 9999 d. C.
LONG Datos de caracteres de longitud variable (hasta 2 GB).

CLOB Datos de caracteres (hasta 4 GB).

Oracle Database: Conceptos Fundamentales de SQL I 10-13


Tipos de Dato de Fecha y Hora
Tipo de Dato Descripción
TIMESTAMP Permite almacenar los datos de tiempo como fecha con segundos
fraccionarios. Almacena los valores de año, mes, día, hora, y segundos
del tipo de dato DATE, así como el valor para segundos fraccionarios.
Hay distintas variantes de este tipo de dato, entre otras, WITH
TIMEZONE, WITH LOCALTIMEZONE.
INTERVAL YEAR TO Permite almacenar el tiempo como un intervalo de años y meses.
MONTH Utilizado para representar la diferencia entre dos valores de fecha y hora
en los que las únicas partes significativas son el año y el mes.
INTERVAL DAY TO Permite almacenar el tiempo como un intervalo de días, horas, minutos y
SECOND segundos. Utilizado para representar la diferencia exacta entre dos
valores de fecha y hora.
Nota: estos tipos de dato de fecha y hora están disponibles con las versiones Oracle9i y posteriores.
Los tipos de dato de fecha y hora se tratan más detalladamente en la lección sobre gestión de datos
situados en distintas zonas horarias del curso Oracle Database: Conceptos Fundamentales de
SQL II.
Además, para obtener más información sobre los tipos de dato de fecha y hora, consulte las secciones
sobre tipo de de dato TIMESTAMP, tipo de dato INTERVAL YEAR TO MONTH y tipo de dato
INTERVAL DAY TO SECOND en Oracle Database SQL Language Reference (Referencia sobre

Oracle Database: Conceptos Fundamentales de SQL I 10-15


Lenguaje SQL de Oracle Database) para la base de datos 10g u 11g.

Oracle Database: SQL Fundamentals I 10 - 15


Oracle Database: Conceptos Fundamentales de SQL I 10-16
Restricciones
El servidor de Oracle utiliza restricciones para evitar la introducción de datos no válidos en las tablas.
Puede utilizar restricciones para realizar lo siguiente:
• Aplicar reglas a los datos de la tabla cuando se inserta, actualiza o suprime una fila de la misma.
La restricción se debe cumplir para que la operación sea correcta.
• Evitar la supresión de una tabla si hay dependencias de otras tablas.
• Proporcionar reglas para las herramientas de Oracle, como Oracle Developer.
Restricciones de Integridad de Datos
Restricción Descripción
NOT NULL Especifica que la columna no puede contener un valor nulo.

UNIQUE Especifica una columna o combinación de columnas cuyos valores


deben ser únicos para todas las filas de la tabla.

PRIMARY KEY Identifica de forma única cada fila de la tabla.

FOREIGN KEY Establece y aplica la integridad referencial entre la columna y la


columna de la tabla a la que se hace referencia; por ejemplo, busca
los valores de una tabla que coinciden con los valores de la otra tabla.
CHECK Especifica una condición que debe ser verdadera.

Oracle Database: Conceptos Fundamentales de SQL I 10-17


Instrucciones de Restricción
Todas las restricciones se almacenan en el diccionario de datos. Es fácil hacer referencia a las
restricciones si les asigna un nombre significativo. Los nombres de las restricciones deben seguir las
reglas de nomenclatura de objetos estándar, excepto que el nombre no puede ser el mismo que el de
otro objeto propiedad del mismo usuario. Si no asigna ningún nombre a la restricción, el servidor de
Oracle genera un nombre con el formato SYS_Cn, donde n es un entero para que el nombre de la
restricción sea único.
Las restricciones se pueden definir en el momento de la creación de la tabla o después de haberla
creado. Puede definir una restricción a nivel de columna o de tabla. Funcionalmente, una restricción
a nivel de tabla es la mismo que una restricción a nivel de columna.
Para obtener más información, consulte la sección sobre funciones de restricciones en Oracle
Database SQL Language Reference (Referencia sobre Lenguaje SQL de Oracle Database) para la
base de datos 10g u 11g.

Oracle Database: Conceptos Fundamentales de SQL I 10-18


Definición de Restricciones
En la diapositiva se proporciona la sintaxis para la definición de restricciones al crear una tabla.
Puede crear las restricciones a nivel de columna o de tabla. Las restricciones definidas a nivel de
columna se incluyen al definir la columna. Las restricciones a nivel de tabla se definen al final de la
definición de tabla y debe hacer referencia a la columna o las columnas a las que pertenece la
restricción en un juego de paréntesis. Se trata principalmente de la sintaxis que diferencia a las dos;
de lo contrario, funcionalmente, una restricción a nivel de columna es lo mismo que una restricción a
nivel de tabla.
Las restricciones NOT NULL se deben definir a nivel de columna.
Las restricciones que se aplican a más de una columna se deben definir a nivel de tabla.
En la sintaxis:
schema es el mismo nombre que el del propietario
table es el nombre de la tabla
DEFAULT expr especifica un valor por defecto para utilizarlo si se omite un valor en
la sentencia INSERT
column es el nombre de la columna
datatype es el tipo de dato y la longitud de la columna
column_constraint es una restricción de integridad como parte de la definición de
columna
table_constraint es una restricción de integridad como parte de la definición de tabla

Oracle Database: Conceptos Fundamentales de SQL I 10-19


Definición de Restricciones (continuación)
Las restricciones se crean normalmente al mismo tiempo que la tabla. Las restricciones se pueden
agregar a una tabla después de su creación y se pueden desactivar temporalmente.
Ambos ejemplos de la diapositiva crean una restricción de clave primaria en la columna
EMPLOYEE_ID de la tabla EMPLOYEES.
1. En el primer ejemplo se utiliza la sintaxis de nivel de columna para definir la restricción.
2. En el segundo ejemplo se utiliza la sintaxis de nivel de tabla para definir la restricción.
Encontrará más información sobre la restricción de clave primaria más adelante en esta lección.

Oracle Database: Conceptos Fundamentales de SQL I 10-20


Restricción NOT NULL
La restricción NOT NULL garantiza que la columna no contiene ningún valor nulo. Las columnas sin
la restricción NOT NULL pueden contener valores nulos por defecto. Las restricciones NOT NULL se
deben definir a nivel de columna. En la tabla EMPLOYEES, la columna EMPLOYEE_ID hereda una
restricción NOT NULL como se define en la clave primaria. De lo contrario, las columnas
LAST_NAME, EMAIL, HIRE_DATE y JOB_ID tienen la restricción NOT NULL aplicada.
Nota: la restricción de clave primaria se trata con detalle más adelante en esta misma lección.

Oracle Database: Conceptos Fundamentales de SQL I 10-21


Restricción UNIQUE
Una restricción de integridad de clave UNIQUE necesita que todos los valores de una columna o
juego de columnas (clave) sean únicos; es decir, que dos filas de una tabla no pueden tener valores
duplicados en una columna o juego de columnas concreto. La columna (o juego de columnas)
incluida en la definición de la restricción de clave UNIQUE se denomina clave única. Si la restricción
UNIQUE comprende más de una columna, el grupo de columnas se denomina clave única
compuesta.
Las restricciones UNIQUE permiten la entrada de valores nulos a menos que defina también las
restricciones NOT NULL para las mismas columnas. De hecho, se puede incluir cualquier número de
valores nulos para las columnas sin restricciones NOT NULL porque los valores nulos no se
consideran iguales a ningún otro elemento. Un valor nulo en una columna (o en todas las columnas
de una clave UNIQUE compuesta) cumple siempre una restricción UNIQUE.
Nota: debido al mecanismo de búsqueda de restricciones UNIQUE en una o más columnas, no puede
tener valores idénticos en las columnas no nulas de una restricción de clave UNIQUE compuesta
parcialmente nula.

Oracle Database: Conceptos Fundamentales de SQL I 10-22


Restricción UNIQUE (continuación)
Las restricciones UNIQUE se pueden definir a nivel de tabla o de columna. Defina la restricción a
nivel de tabla si desea crear una clave única compuesta. Una clave compuesta se define si no hay un
único atributo que pueda identificar de forma única una fila. En ese caso, puede tener una clave única
compuesta de dos o más columnas, el valor combinado de ambas es siempre único y puede
identificar filas.
En el ejemplo de la diapositiva se aplica la restricción UNIQUE a la columna EMAIL de la tabla
EMPLOYEES. El nombre de la restricción es EMP_EMAIL_UK.
Nota: el servidor de Oracle aplica la restricción UNIQUE mediante la creación implícita de un índice
único en la columna o columnas únicas.

Oracle Database: Conceptos Fundamentales de SQL I 10-23


Restricción PRIMARY KEY
La restricción PRIMARY KEY crea una clave primaria para la tabla. Sólo se puede crear una clave
primaria para cada tabla. La restricción PRIMARY KEY es una columna o juego de columnas que
identifica de forma única cada fila de tabla. Esta restricción aplica la unicidad de la columna o
combinación de columnas y garantiza que ninguna columna que forme parte de la clave contenga un
valor nulo.
Nota: puesto que la unicidad forma parte de la definición de restricción de clave primaria, el servidor
de Oracle aplica la unicidad mediante la creación implícita de un índice único en la columna o
columnas de clave primaria.

Oracle Database: Conceptos Fundamentales de SQL I 10-24


Restricción FOREIGN KEY
La restricción FOREIGN KEY (o integridad referencial) designa una columna o combinación de
columnas como clave ajena y establece una relación entre una clave primaria o única en la misma
tabla o en otra diferente.
En el ejemplo de la diapositiva, DEPARTMENT_ID se ha definido como clave ajena en la tabla
EMPLOYEES (tabla dependiente o secundaria); hace referencia a la columna DEPARTMENT_ID de
la tabla DEPARTMENTS (tabla a la que se hace referencia o principal).
Instrucciones
• El valor de clave ajena debe coincidir con un valor existente de la tabla principal o ser un valor
NULL.
• Las claves ajenas se basan en los valores de datos y son punteros puramente lógicos, en lugar de
físicos.

Oracle Database: Conceptos Fundamentales de SQL I 10-25


Restricción FOREIGN KEY (continuación)
Las restricciones FOREIGN KEY se pueden definir a nivel de restricción de columna o de tabla.
Las claves ajenas compuestas se deben crear mediante la definición a nivel de tabla.
En el ejemplo de la diapositiva se define una restricción FOREIGN KEY en la columna
DEPARTMENT_ID de la tabla EMPLOYEES, mediante la sintaxis a nivel de tabla. El nombre de la
restricción es EMP_DEPT_FK.
La clave ajena se puede definir también a nivel de columna, siempre que la restricción está basada en
una sola columna. La sintaxis difiere en que las palabras clave FOREIGN KEY no aparecen. Por
ejemplo:
CREATE TABLE employees
(...
department_id NUMBER(4) CONSTRAINT emp_deptid_fk
REFERENCES departments(department_id),
...
)

Oracle Database: Conceptos Fundamentales de SQL I 10-26


Restricción FOREIGN KEY: Palabras Clave
La clave ajena se define en la tabla secundaria y la tabla que contiene la columna a la que se hace
referencia es la tabla principal. La clave ajena se define mediante una combinación de las siguientes
palabras clave:
• FOREIGN KEY se utiliza para definir la columna en la tabla secundaria a nivel de restricción de
tabla.
• REFERENCES identifica la tabla y la columna en la tabla principal.
• ON DELETE CASCADE indica que al suprimir una fila de la tabla principal, también se suprimen
las filas dependientes de la tabla secundaria.
• ON DELETE SET NULL indica que al suprimir una fila de la tabla principal, los valores de clave
ajena se definen como nulos.
El comportamiento por defecto se denomina regla estricta, que no permite la actualización o
supresión de los datos a los que se hace referencia.
Sin las opciones ON DELETE CASCADE u ON DELETE SET NULL, la fila de la tabla principal no se
puede suprimir si hace referencia a la misma en la tabla secundaria.

Oracle Database: Conceptos Fundamentales de SQL I 10-27


Restricción CHECK
La restricción CHECK define una condición que debe cumplir cada fila. La condición puede utilizar
las mismas construcciones que las condiciones de consulta, con las siguientes excepciones:
• Referencias a las pseudocolumnas CURRVAL, NEXTVAL, LEVEL y ROWNUM
• Llamadas a las funciones SYSDATE, UID, USER y USERENV
• Consultas que hagan referencia a otros valores en otras filas
Una sola columna puede tener varias restricciones CHECK que hagan referencia a la columna en su
definición. No hay ningún límite en cuanto al número de restricciones CHECK que puede definir en
una columna.
Las restricciones CHECK se pueden definir a nivel de tabla o de columna.
CREATE TABLE employees
(...
salary NUMBER(8,2) CONSTRAINT emp_salary_min
CHECK (salary > 0),
...

Oracle Database: Conceptos Fundamentales de SQL I 10-28


Sentencia CREATE TABLE: Ejemplo
El ejemplo de la diapositiva muestra la sentencia que se utiliza para crear la tabla EMPLOYEES en el
esquema HR.

Oracle Database: Conceptos Fundamentales de SQL I 10-29


Violación de Restricciones
Si tiene restricciones en lugar de columnas, recibirá un error si intenta violar la regla de restricción.
Por ejemplo, si intenta actualizar un registro con un valor ligado a una restricción de integridad, se
devuelve un error.
En el ejemplo de la diapositiva, el departamento 55 no existe en la tabla principal, DEPARTMENTS y,
por lo tanto, recibirá la violación de clave principal no encontrada ORA-02291.

Oracle Database: Conceptos Fundamentales de SQL I 10-30


Violación de Restricciones (continuación)
Por ejemplo, si intenta suprimir un registro con un valor ligado a una restricción de integridad, se
devuelve un error.
En el ejemplo de la diapositiva, se intenta suprimir el departamento 60 de la tabla DEPARTMENTS,
pero se produce un error porque ese número de departamento se utiliza como clave ajena en la tabla
EMPLOYEES. Si el registro principal que intenta suprimir tiene registros secundarios, recibirá la
violación de registro secundario encontrado ORA-02292.
La siguiente sentencia funciona porque no hay ningún empleado en el departamento 70:
DELETE FROM departments
WHERE department_id = 70;

Oracle Database: Conceptos Fundamentales de SQL I 10-31


Oracle Database: Conceptos Fundamentales de SQL I 10-32
Creación de una Tabla mediante una Subconsulta
Un segundo método para crear tablas es aplicar la cláusula AS subquery, que crea la tabla e inserta
las filas desvueltas de la subconsulta.
En la sintaxis:
table es el nombre de la tabla
column es el nombre de la columna, el valor por defecto y la restricción de integridad
subquery es la sentencia SELECT que define el juego de filas que se va a insertar
en la nueva tabla
Instrucciones
• La tabla se crea con los nombres de columna especificados y las filas recuperadas por la sentencia
SELECT se insertan en la tabla.
• La definición de columna sólo puede contener el nombre de la columna y el valor por defecto.
• Si se proporcionan especificaciones de columna, el número de columnas debe ser igual al número
de columnas de la lista SELECT de la subconsulta.
• Si no se proporcionan especificaciones de columna, los nombres de columna de la tabla son los
mismos que los de la subconsulta.
• Las definiciones de tipo de dato de columna y de la restricción NOT NULL se transfieren a la
nueva tabla. Tenga en cuenta que sólo la restricción explícita NOT NULL se heredará. La columna
PRIMARY KEY no transferirá la función NOT NULL a la nueva columna. Las demás reglas de
restricción no se transfieren a la nueva tabla. Sin embargo, puede agregar restricciones en la
definición de columna.

Oracle Database: Conceptos Fundamentales de SQL I 10-33


Creación de una Tabla mediante una Subconsulta (continuación)
En el ejemplo de la diapositiva, se crea una tabla denominada DEPT80, que contiene los detalles de
todos los empleados que trabajan en el departamento 80. Tenga en cuenta que los datos de la tabla
DEPT80 proceden de la tabla EMPLOYEES.
Puede verificar la existencia de una tabla de base de datos y comprobar las definiciones de columna
mediante el comando DESCRIBE.
Sin embargo, asegúrese de proporcionar un alias de columna al seleccionar una expresión. La
expresión SALARY*12 recibe el alias ANNSAL. Sin el alias, se genera el siguiente error:

Oracle Database: Conceptos Fundamentales de SQL I 10-34


Oracle Database: Conceptos Fundamentales de SQL I 10-35
Sentencia ALTER TABLE
Después de crear una tabla, puede que necesite cambiar la estructura de la tabla por cualquiera de las
siguientes razones:
• Ha omitido una columna.
• Debe cambiar la definición de columna o su nombre.
• Debe eliminar columnas.
• Desea definir la tabla en modo de sólo lectura.
Para ello, puede utilizar la sentencia ALTER TABLE.

Oracle Database: Conceptos Fundamentales de SQL I 10-36


Tablas de Sólo Lectura
Con Oracle Database 11g, puede especificar READ ONLY para definir una tabla en modo de sólo
lectura. Cuando la tabla esté en modo READ-ONLY, no puede ejecutar ninguna sentencia DML que
afecte a la tabla o a cualquier sentencia SELECT ... FOR UPDATE. Puede ejecutar las sentencias
DDL siempre y cuando no modifique los datos de la tabla. Se permiten operaciones sobre índices
asociados a la tabla cuando la tabla esté en modo READ ONLY.
Especifique READ/WRITE para volver a definir una tabla de sólo lectura en modo de
lectura/escritura.
Nota: si es necesario puede borrar una tabla con modo READ ONLY. El comando DROP se ejecuta
sólo en el diccionario de datos, por lo que no es necesario el acceso al contenido de la tabla. El
espacio utilizado por la tabla no se reclamará hasta que el tablespace se vuelva a definir en
lectura/escritura y, a continuación, los cambios necesarios se podrán realizar en las cabeceras de
segmento de bloque, etc.
Para obtener más información sobre la sentencia ALTER TABLE, consulte el curso titulado Oracle
Database: Conceptos Fundamentales de SQL II.

Oracle Database: Conceptos Fundamentales de SQL I 10-37


Oracle Database: Conceptos Fundamentales de SQL I 10-38
Borrado de una Tabla
La sentencia DROP TABLE mueve una tabla a la papelera de reciclaje o elimina la tabla y todos sus
datos de la base de datos completamente. A menos que especifique la cláusula PURGE, la sentencia
DROP TABLE no vuelve a liberar espacio en los tablespaces para que lo utilicen otros objetos y el
espacio sigue contando en la cuota de espacio del usuario. El borrado de una tabla invalida objetos
dependientes y elimina privilegios de objeto en la tabla.
Al borrar una tabla, la base de datos pierde todos los datos de la tabla y los índices asociados
a los mismos.
Sintaxis
DROP TABLE table [PURGE]
En la sintaxis, table es el nombre de la tabla.
Instrucciones
• Se suprimen todos los datos de la tabla.
• Se mantienen las vistas y los sinónimos, pero no son válidos.
• Se confirman las transacciones pendientes.
• Sólo el creador de la tabla o un usuario con el privilegio DROP ANY TABLE puede eliminar una
tabla.
Nota: utilice la sentencia FLASHBACK TABLE para restaurar una tabla borrada de la papelera de
reciclaje. Esto se trata con más detalle en el curso titulado Oracle Database: Conceptos
Fundamentales de SQL II.

Oracle Database: Conceptos Fundamentales de SQL I 10-39


Respuesta: 1, 2, 4

Oracle Database: Conceptos Fundamentales de SQL I 10-40


Resumen
En esta lección debe haber aprendido a realizar lo siguiente:
CREATE TABLE
• Utilizar la sentencia CREATE TABLE para crear una tabla e incluir restricciones.
• Crear una tabla basada en otra tabla mediante una subconsulta.
DROP TABLE
• Eliminar filas y la estructura de una tabla.
• Una vez ejecutada, no se puede realizar un rollback de esta sentencia.

Oracle Database: Conceptos Fundamentales de SQL I 10-41


Práctica 10: Visión General
Cree nuevas tablas mediante la sentencia CREATE TABLE. Confirme que la nueva tabla se ha
agregado a la base de datos. También aprenderá a definir el estado de una tabla como READ ONLY y,
a continuación, revertir a READ/WRITE.
Nota: para todas las sentencias DDL y DML, haga clic en el icono Run Script (o pulse [F5]) para
ejecutar la consulta en SQL Developer. De esta forma, ve los mensajes de comentarios en la página
con separadores Script Output. Para consultas SELECT, siga haciendo clic en el icono Execute
Statement o pulse [F9] para obtener la salida con formato en la página con separadores Results.

Oracle Database: Conceptos Fundamentales de SQL I 10-42

También podría gustarte