Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie man eine Tabelle in Oracle löscht

  • Die DROP-TABELLE Der Oracle-Befehl wird verwendet, um eine Tabelle aus der Datenbank zu entfernen.
  • Die gelöschte Tabelle und ihre Daten stehen nicht mehr zur Auswahl zur Verfügung. Durch das Löschen einer Tabelle werden der Index und die damit verbundenen Trigger gelöscht.
  • Oracle Views, Synonyme werden nicht gelöscht, aber sie werden ungültig
  • Gelöschte Tabellen können mit dem FLASHBACK-Dienstprogramm wiederhergestellt werden, falls im Papierkorb verfügbar. Diese Funktionalität ist ab 10 g verfügbar
  • Nur der Ersteller der Tabelle kann die Tabelle löschen oder  der Benutzer mit der Berechtigung zum Löschen einer Tabelle kann die Tabelle löschen

Die Syntax für Drop-Table-Orakel

DROP TABLE [TABLE NAME] [PURGE]

Die folgende Anweisung löscht die Tabelle und legt sie in den Papierkorb.

DROP TABLE TEST;

Die folgende Anweisung kann verwendet werden, um es aus dem Papierkorb wiederherzustellen

FLASHBACK TABLE TEST TO BEFORE DROP;

Die folgende Anweisung löscht die Tabelle und löscht sie auch aus dem Papierkorb.

DROP TABLE TEST PURGE;

Cascade Constraints für Drop-Tabellen

Wir müssen CASCADE CONSTRAINTS angeben, um alle referenziellen Integritätsbedingungen zu löschen, die sich auf Primärschlüssel und eindeutige Schlüssel in der gelöschten Tabelle beziehen. Wenn Sie diese Klausel weglassen und solche referenziellen Integritätsbedingungen vorhanden sind, gibt die Datenbank einen Fehler zurück und löscht die Tabelle nicht.

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.

Wie man mehrere Tabellen in Oracle löscht

Es kann erforderlich sein, mehrere Tabellen in einem einzigen Schritt zu löschen

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

Wie man alle Tabellen im Schema löscht

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

@drop_table_schema.sql

Tabelle löschen, falls in Oracle vorhanden

Manchmal möchten wir die Existenz der Tabelle überprüfen, um Fehler im Code zu vermeiden. In MySQL, SQL-Server, haben wir eine Existiert-Klausel, während wir die Drop-Anweisung verwenden, aber es gibt keine solche Klausel in Oracle.

Wir können den anonymen PLSQL-Block verwenden, um dasselbe zu erreichen

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;

Ich hoffe, Ihnen gefällt der Inhalt der Drop-Table-Anweisung in Oracle. Bitte lassen Sie mich das Feedback wissen

Empfohlene Lektüre

Oracle-Dokumentation
SQL-FAQ

Verwandte Artikel

So aktualisieren Sie die Tabelle in Oracle:Eine Update-Anweisung in Oracle wird verwendet, um die vorhandenen Zeilen in der Oracle-Tabelle zu ändern. Das Update kann auf mehrere Arten ausgeführt werden
Wie man TABLE in Oracle abschneidet:Das Abschneiden von TABLE in Oracle ist schneller als das Löschen aus der Tabelle in Oracle. Es ist eine DDL-Anweisung und löst die Trigger beim Löschen nicht aus
So löschen Sie eine Zeile in Oracle:Delete from the table in Oracle wird verwendet, um die Zeilen zu löschen. DELETE-Zeilen können mit der EXISTS/NOT EXISTS-Klausel, einer Tabelle basierend auf einer Unterabfrage, einer Kaskade
Alter Table in Oracle
INSERT-Anweisung in Oracle
Erstellung einer Tabellensyntax in Oracle
Primärschlüssel erstellt werden in Oracle