Oracle
 sql >> Database >  >> RDS >> Oracle

Come eliminare la tabella in Oracle

  • La TAVELLA A CADUTA Il comando oracle viene utilizzato per rimuovere una tabella dal database.
  • La tabella eliminata e i relativi dati non rimangono più disponibili per la selezione. L'eliminazione di una tabella elimina l'indice e i trigger ad esso associati.
  • Oracle Views, i sinonimi non vengono eliminati ma diventano non validi
  • La tabella eliminata può essere recuperata utilizzando l'utilità FLASHBACK, se disponibile nel cestino. Questa funzionalità è disponibile a partire da 10 g
  • Solo il creatore di tabella può eliminare la tabella o  l'utente con il privilegio di eliminazione di qualsiasi tabella può eliminare la tabella

La sintassi per Drop table oracle

DROP TABLE [TABLE NAME] [PURGE]

L'istruzione seguente rilascerà la tabella e la posizionerà nel cestino.

DROP TABLE TEST;

L'istruzione seguente può essere utilizzata per ripristinarlo dal cestino

FLASHBACK TABLE TEST TO BEFORE DROP;

L'istruzione seguente eliminerà il tavolo e lo scaricherà anche dal cestino.

DROP TABLE TEST PURGE;

Vincoli a cascata della tabella di rilascio

Dobbiamo specificare CASCADE CONSTRAINTS per eliminare tutti i vincoli di integrità referenziale che fanno riferimento a chiavi primarie e univoche nella tabella eliminata. Se ometti questa clausola ed esistono tali vincoli di integrità referenziale, il database restituisce un errore e non elimina la tabella.

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.

Come eliminare più tabelle in Oracle

Potrebbe essere necessario eliminare più tabelle in un unico passaggio

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

Come eliminare tutte le tabelle nello schema

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

@drop_table_schema.sql

Drop table se esiste in Oracle

A volte vogliamo controllare l'esistenza della tabella per evitare di generare errori nel codice. In MySQL, SQL Server, abbiamo una clausola esiste durante l'utilizzo dell'istruzione drop ma non esiste una clausola del genere in Oracle.

Possiamo usare il blocco anonimo PLSQL per ottenere la stessa cosa

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;

Spero che il contenuto dell'istruzione drop table in Oracle ti piaccia. Per favore fatemi sapere il feedback

Lettura consigliata

Documentazione Oracle
Domande frequenti su SQL

Articoli correlati

Come aggiornare la tabella in Oracle:un'istruzione di aggiornamento in Oracle viene utilizzata per modificare le righe esistenti nella tabella Oracle. L'aggiornamento può essere eseguito in diversi modi
Come troncare TABLE in Oracle:Troncare TABLE in Oracle è più veloce dell'eliminazione dalla tabella in Oracle. È un'istruzione DDL e non attiva i trigger di eliminazione
come eliminare una riga in Oracle:Elimina dalla tabella in Oracle viene utilizzata per eliminare le righe. Le righe DELETE possono essere eseguite utilizzando la clausola EXISTS/NOT EXISTS, tabella basata su una sottoquery, cascata
Alter Table in Oracle
Istruzione INSERT in Oracle
crea la sintassi della tabella in Oracle
Chiave primaria in Oracle