Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak upuścić stół w wyroczni?

  • TABELA UPUSZCZANIA Polecenie oracle służy do usuwania tabeli z bazy danych.
  • Upuszczona tabela i jej dane nie są już dostępne do wyboru. Upuszczenie tabeli powoduje upuszczenie indeksu i powiązanych z nim wyzwalaczy.
  • Widoki Oracle, synonimy nie są usuwane, ale stają się nieprawidłowe
  • Upuszczoną tabelę można odzyskać za pomocą narzędzia FLASHBACK, jeśli jest ono dostępne w koszu. Ta funkcja jest dostępna od 10g
  • Tylko twórca tabeli może ją usunąć lub użytkownik z uprawnieniami do usuwania dowolnej tabeli może ją usunąć

Składnia wyroczni tabeli Drop

DROP TABLE [TABLE NAME] [PURGE]

Poniższe stwierdzenie spowoduje upuszczenie stołu i umieszczenie go w koszu.

DROP TABLE TEST;

Poniższe oświadczenie może zostać użyte do przywrócenia go z kosza

FLASHBACK TABLE TEST TO BEFORE DROP;

Poniższa instrukcja usunie stół i wypłucze go również z kosza.

DROP TABLE TEST PURGE;

upuść ograniczenia kaskadowe tabeli

Musimy określić OGRANICZENIA KASKADOWE, aby usunąć wszystkie ograniczenia integralności referencyjnej, które odnoszą się do kluczy podstawowych i unikalnych w usuwanej tabeli. Jeśli pominiesz tę klauzulę, a takie ograniczenia integralności referencyjnej istnieją, baza danych zwróci błąd i nie usunie tabeli.

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.

Jak usunąć wiele tabel w Oracle

Może być wymagane upuszczenie wielu tabel w jednym kroku

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

Jak usunąć wszystkie tabele w schemacie

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

@drop_table_schema.sql

Upuść tabelę, jeśli istnieje w Oracle

Czasami chcemy sprawdzić istnienie tabeli, aby uniknąć błędów w kodzie. W MySQL, serwerze sql, istnieje klauzula podczas używania instrukcji drop, ale nie ma takiej klauzuli w Oracle.

Możemy użyć anonimowego bloku PLSQL, aby osiągnąć to samo

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;

Mam nadzieję, że podoba Ci się zawartość instrukcji drop table w Oracle. Proszę o przesłanie opinii

Zalecane czytanie

Dokumentacja Oracle
Najczęściej zadawane pytania dotyczące SQL

Powiązane artykuły

Jak zaktualizować tabelę w Oracle:Instrukcja aktualizacji w Oracle służy do modyfikowania istniejących wierszy w tabeli Oracle. Aktualizację można wykonać na wiele sposobów.
Jak obcinać TABLE w Oracle:Obcinanie TABLE w Oracle jest szybsze niż usuwanie z tabeli w Oracle. Jest to instrukcja DDL i nie uruchamia wyzwalaczy przy usuwaniu
jak usunąć wiersz w Oracle:Usuń z tabeli w Oracle służy do usuwania wierszy. DELETE wiersze można wykonać za pomocą klauzuli EXISTS/NOT EXISTS, tabeli opartej na podzapytaniu, kaskadowo
Zmień tabelę w Oracle
Instrukcję INSERT w Oracle
utwórz składnię tabeli w Oracle
Klucz podstawowy w Oracle


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie zawierające sprzężenia zewnętrzne zachowuje się inaczej w Oracle 12c

  2. Czym są rekordy PLSQL w Oracle

  3. Udowodnienie równoważności zapytań SQL

  4. Jak działa zawiera() w PL-SQL?

  5. Funkcja NULLIF() w Oracle