sql >> Base de Datos >  >> RDS >> Oracle

Cómo soltar la tabla en Oracle

  • La TABLA DE DESCARGA El comando Oracle se usa para eliminar una tabla de la base de datos.
  • La tabla eliminada y sus datos ya no están disponibles para su selección. Al eliminar una tabla, se eliminan el índice y los activadores asociados con ella.
  • Oracle Views, los sinónimos no se eliminan, pero dejan de ser válidos
  • La tabla eliminada se puede recuperar con la utilidad FLASHBACK, si está disponible en la papelera de reciclaje. Esta funcionalidad está disponible a partir de 10g
  • Solo el creador de  la tabla puede descartar la tabla o   el usuario con el privilegio de descartar cualquier tabla  puede descartar la tabla

La sintaxis para Drop table oracle

DROP TABLE [TABLE NAME] [PURGE]

La siguiente declaración dejará caer la tabla y la colocará en la papelera de reciclaje.

DROP TABLE TEST;

La siguiente declaración se puede usar para restaurarlo desde la papelera de reciclaje

FLASHBACK TABLE TEST TO BEFORE DROP;

La siguiente declaración eliminará la tabla y también la eliminará de la papelera de reciclaje.

DROP TABLE TEST PURGE;

Restricciones de cascada de tablas desplegables

Tenemos que especificar RESTRICCIONES EN CASCADA para descartar todas las restricciones de integridad referencial que se refieren a claves primarias y únicas en la tabla descartada. Si omite esta cláusula y existen tales restricciones de integridad referencial, la base de datos devuelve un error y no descarta la tabla.

CREATE TABLE "EMP"
( "EMPNO" NUMBER(6,0),
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0),
CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"),
CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
REFERENCES "DEPT" ("DEPTNO") ENABLE
);
CREATE TABLE "DEPT"
( "DEPTNO" NUMBER(2,0),
"DNAME" VARCHAR2(14),
"LOC" VARCHAR2(13),
CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO")
;
SQL> desc emp
Name Null? Type
----------------------------------------- -------- -----------------------
EMPNO NOT NULL NUMBER(6)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)SQL>
SQL> desc dept
Name Null? Type
----------------------------------------- -------- -----------------------
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
SQL>
insert into DEPT values(10, 'ACCOUNTING', 'NEW YORK');
insert into dept values(20, 'RESEARCH', 'DALLAS');
insert into dept values(30, 'RESEARCH', 'DELHI');
insert into dept values(40, 'RESEARCH', 'MUMBAI');
insert into emp values( 7698, 'BLAKE', 'MANAGER', 7839, to_date('1-5-2007','dd-mm-yyyy'), 2850, null, 10 );
insert into emp values( 7782, 'CLARK', 'MANAGER', 7839, to_date('9-6-2008','dd-mm-yyyy'), 2450, null, 10 );
insert into emp values( 7788, 'SCOTT', 'ANALYST', 7566, to_date('9-6-2012','dd-mm-yyyy'), 3000, null, 20 );
insert into emp values( 7789, 'TPM', 'ANALYST', 7566, to_date('9-6-2017','dd-mm-yyyy'), 3000, null, null );
insert into emp values( 7560, 'T1OM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, 20 );
insert into emp values( 7790, 'TOM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, null );
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7698 BLAKE MANAGER 7839 01-MAY-07 2850 10
7782 CLARK MANAGER 7839 09-JUN-08 2450 10
7788 SCOTT ANALYST 7566 09-JUN-12 3000 20
7789 TPM ANALYST 7566 09-JUN-17 3000
7790 TOM ANALYST 7567 09-JUL-17 4000
4534 xyz 1000 20
4576 abc 1000
7560 T1OM ANALYST 7567 09-JUL-17 4000 20
SQL> drop table dept;
drop table dept
*
ERROR at line 1:
ORA-02449: unique/primary keys in table referenced by foreign keys
SQL>
SQL> drop table dept cascade constraints;
Table dropped.

Cómo eliminar varias tablas en Oracle

Puede haber un requisito para eliminar varias tablas en un solo paso

begin
execute immediate 'drop table t_name_1';
execute immediate 'drop table t_name_2';
end;

Cómo descartar todas las tablas en el esquema

spool drop_table_schema.sql
select 'drop table '||table_name||';'  from user_tables
spool off

@drop_table_schema.sql

Eliminar tabla si existe en Oracle

A veces queremos verificar la existencia de la tabla para evitar arrojar errores en el código. En MySQL, servidor sql, tenemos una cláusula que existe al usar la instrucción drop, pero no existe tal cláusula en Oracle.

Podemos usar el bloque anónimo PLSQL para lograr lo mismo

DECLARE
count INT; BEGIN
SELECT Count(*)
INTO count
FROM dba_tables
WHERE owner = '<schema name>'
AND table_name = '<table name>'; IF count = 1 THEN
EXECUTE IMMEDIATE 'drop table test';
END IF;
END;

Espero que le guste el contenido de la declaración de la tabla desplegable en Oracle. Por favor, hágame saber los comentarios

Lectura recomendada

Documentación de Oracle
Preguntas frecuentes sobre SQL

Artículos relacionados

Cómo actualizar la tabla en Oracle:se utiliza una declaración de actualización en Oracle para modificar las filas existentes en la tabla de Oracle. La actualización se puede ejecutar de varias maneras
Cómo truncar una TABLA en Oracle:Truncar una TABLA en Oracle es más rápido que eliminarla de la tabla en Oracle. Es una instrucción DDL y no activa los activadores de eliminación
cómo eliminar una fila en Oracle:Eliminar de la tabla en Oracle se usa para eliminar las filas. Las filas DELETE  se pueden hacer usando la cláusula EXISTS/NOT EXISTS, tabla basada en una subconsulta, cascada
Alterar tabla en Oracle
Instrucción INSERT en Oracle
crear sintaxis de tabla en Oracle
Clave principal en oráculo