Databases

T05-004 Eliminación de tablas

Enunciado

TRUNCATE TABLE

Oracle dispone de la orden TRUNCATE TABLE que te permitirá eliminar los datos (filas) de una tabla sin eliminar su estructura.

 

Hemos dicho anteriormente. que para eliminar una tabla utilizaremos el comando DROP TABLE.

Sintaxis:

TRUNCATE TABLE NombreTabla [CASCADE];

La opción CASCADE se puede incluir para los casos en que alguna de las columnas sea clave ajena en otra tabla secundaria, lo que impediría su borrado. Al colocar esta opción Oracle trunca todas las tablas hijas que referencien a la tabla padre con una restricción de integridad referencial del tipo ON DELETE CASCADE.

Ejemplo:

Imaginemos que hemos creado la tabla USUARIOS y hemos insertado varios registros:

CREATE TABLE USUARIOS (
    Login VARCHAR(15) PRIMARY KEY,
    Password VARCHAR(8) NOT NULL,
    FechaIngreso DATE DEFAULT SYSDATE
);

INSERT INTO USUARIOS(Login, Password) VALUES('Usuario1', '12345678');
INSERT INTO USUARIOS(Login, Password) VALUES('Usuario2', '23456789');
INSERT INTO USUARIOS(Login, Password) VALUES('Usuario3', '34567890');

Si ejecutamos, posteriormente, el comando

TRUNCATE TABLE USUARIOS;

Borraríamos el contenido. Por eso la respuesta a un

SELECT * FROM USUARIOS;

devolvería

no data found

Pero, en cambio, la estructura de la tabla USUARIOS aparecería si hacemos una consulta como

DESC USUARIOS;

Ejercicio:

Imagina que, en la base de datos, tenemos la siguiente tabla, con su respectivos datos:

CREATE TABLE MODULOS (
    CODIGO NUMBER PRIMARY KEY,
    NOMBRE VARCHAR2 (100),
    DEPARTAMENTO CHAR(3)
);
    
INSERT INTO MODULOS VALUES (1, 'INFORMATICA', 'INF');
INSERT INTO MODULOS VALUES (2, 'MATEMATICAS', 'MAT');

 

Borra los registros de la tabla, sin borrar su estructura.

Tipo

DDL

Solución


												
TRUNCATE TABLE MODULOS;

Prueba


											
SELECT COLUMN_NAME FROM USER_TAB_COLS UNION SELECT NOMBRE FROM MODULOS;

Librerías (Onfly databases)


											
CREATE TABLE MODULOS ( CODIGO NUMBER PRIMARY KEY, NOMBRE VARCHAR2 (100), DEPARTAMENTO CHAR(3) ); INSERT INTO MODULOS VALUES (1, 'INFORMATICA', 'INF'); INSERT INTO MODULOS VALUES (2, 'MATEMATICAS', 'MAT');