- ТАБЛИЦА ЗА ИЗПАДАНЕ Командата oracle се използва за премахване на таблица от базата данни.
- Изпуснатата таблица и нейните данни вече не са достъпни за избор. Изтриването на таблица изпуска индекса и задейства свързаните с нея.
- Oracle Views, синонимите не се отхвърлят, но стават невалидни
- Изпуснатата таблица може да бъде възстановена с помощта на помощната програма FLASHBACK, ако е налична в кошчето. Тази функционалност е налична от 10 g нататък
- Само създателят на таблицата може да пусне таблицата или потребителят с привилегия за отхвърляне на всяка таблица може да пусне таблицата
Синтаксисът на Drop table oracle
DROP TABLE [TABLE NAME] [PURGE]
Изявлението по-долу ще пусне таблицата и ще я постави в кошчето.
DROP TABLE TEST;
Изявлението по-долу може да се използва за възстановяването му от кошчето
FLASHBACK TABLE TEST TO BEFORE DROP;
Изявлението по-долу ще изпусне таблицата и ще я изхвърли от кошчето.
DROP TABLE TEST PURGE;
каскадни ограничения за пускане на таблица
Трябва да зададем КАСКАДНИ ОГРАНИЧЕНИЯ, за да премахнем всички ограничения за референтна цялост, които се отнасят до първични и уникални ключове в изпуснатата таблица. Ако пропуснете тази клауза и съществуват такива ограничения за референтна цялост, тогава базата данни връща грешка и не изпуска таблицата.
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.
Как да премахнете няколко таблици в oracle
Може да има изискване за премахване на няколко таблици в една стъпка
begin
execute immediate 'drop table t_name_1';
execute immediate 'drop table t_name_2';
end;
Как да премахнете всички таблици в схемата
spool drop_table_schema.sql select 'drop table '||table_name||';' from user_tables spool off@drop_table_schema.sql
Изхвърлете таблицата, ако съществува в Oracle
Понякога искаме да проверим съществуването на таблицата, за да избегнем хвърлянето на грешки в кода. В MySQL, sql сървър, имаме клауза за съществуване, докато използваме оператор drop, но няма такава клауза в oracle.
Можем да използваме PLSQL анонимен блок, за да постигнем същото
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;
Надяваме се, че ви харесва съдържанието на изявлението за падаща таблица в Oracle. Моля, уведомете ме за обратната връзка
Препоръчително четене
Документация на Oracle
ЧЗВ за SQL
Сродни статии
Как да актуализирате таблицата в oracle:Инструкция за актуализиране в oracle се използва за модифициране на съществуващите редове в таблицата на oracle. Актуализацията може да се изпълни по няколко начина
Как да съкратите TABLE в Oracle:Съкращаването на TABLE в Oracle е по-бързо от изтриването от таблицата в Oracle. Това е DDL оператор и не задейства тригерите при изтриване
как да изтриете ред в oracle:Изтриване от таблицата в oracle се използва за изтриване на редовете. DELETE редовете могат да се извършват с помощта на клауза EXISTS/NOT EXISTS, таблица, базирана на подзаявка, каскада
Промяна на таблица в Oracle
инструкция INSERT в Oracle
създаване на синтаксис на таблица в oracle
първичен ключ в Oracle