sql >> Database >  >> RDS >> Oracle

Hoe de tafel in orakel te laten vallen

  • De DROP TABLE oracle-opdracht wordt gebruikt om een ​​tabel uit de database te verwijderen.
  • De verwijderde tabel en zijn gegevens blijven niet langer beschikbaar voor selectie. Als u een tabel laat vallen, worden de index en de bijbehorende triggers verwijderd.
  • Oracle Views, synoniemen worden niet verwijderd maar worden ongeldig
  • Gevallen tafel kan worden hersteld met het hulpprogramma FLASHBACK, indien beschikbaar in de prullenbak. Deze functionaliteit is beschikbaar vanaf 10g
  • Alleen de maker van  table kan de tafel verwijderen of   de gebruiker met het recht om een ​​tabel te laten vallen  kan de tafel verwijderen

De syntaxis voor Drop table oracle

DROP TABLE [TABLE NAME] [PURGE]

De onderstaande verklaring zal de tabel laten vallen en in de prullenbak plaatsen.

DROP TABLE TEST;

De onderstaande verklaring kan worden gebruikt om het uit de prullenbak te herstellen

FLASHBACK TABLE TEST TO BEFORE DROP;

De onderstaande verklaring zal de tafel laten vallen en ook uit de prullenbak spoelen.

DROP TABLE TEST PURGE;

drop table cascade-beperkingen

We moeten CASCADE-BEPERKINGEN specificeren om alle referentiële integriteitsbeperkingen die verwijzen naar primaire en unieke sleutels in de verwijderde tabel te verwijderen. Als u deze clausule weglaat en dergelijke referentiële integriteitsbeperkingen bestaan, retourneert de database een fout en wordt de tabel niet verwijderd.

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.

Meerdere tabellen in orakel laten vallen

Er kan een vereiste zijn om meerdere tabellen in één stap te verwijderen

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

Hoe verwijder je alle tabellen in het schema

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

@drop_table_schema.sql

Drop table indien aanwezig in Oracle

Soms willen we het bestaan ​​van de tabel controleren om fouten in de code te voorkomen. In MySQL, sql-server, hebben we een bestaande clausule tijdens het gebruik van de drop-instructie, maar er is geen dergelijke clausule in oracle.

We kunnen PLSQL anoniem blok gebruiken om hetzelfde te bereiken

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;

Ik hoop dat je de inhoud van de drop table-instructie in Oracle leuk vindt. Laat me alsjeblieft de feedback weten

Aanbevolen lectuur

Oracle-documentatie
Veelgestelde vragen over SQL

Gerelateerde artikelen

Hoe de tabel in Oracle bij te werken:Een update-instructie in Oracle wordt gebruikt om de bestaande rijen in de Oracle-tabel te wijzigen. De update kan op meerdere manieren worden uitgevoerd
Hoe TABLE in Oracle af te kappen:Truncate TABLE in Oracle is sneller dan verwijderen uit de tabel in Oracle. Het is een DDL-instructie en het activeert niet de verwijderingstriggers
hoe een rij in Oracle te verwijderen:Verwijderen uit de tabel in Oracle wordt gebruikt om de rijen te verwijderen. DELETE-rijen kunnen worden gedaan met behulp van de EXISTS/NOT EXISTS-clausule, tabel gebaseerd op een subquery, cascade
Tabel wijzigen in Oracle
INSERT-instructie in Oracle
tabelsyntaxis maken in oracle
Primaire sleutel in orakel


  1. Hoe SUBDATE() werkt in MariaDB

  2. De id van een rij ophalen die ik heb bijgewerkt in Sql Server

  3. Wat is de standaardnaam van de beperking in MySQL?

  4. Hoe ODP.NET 2.111 en ODP.NET 4.112 op dezelfde machine naast elkaar te installeren, terwijl beide naar dezelfde databaseserver verwijzen