oracle drop怎么用,Oracle Drop Table

oracle函数 的 Oracle Drop Table

在本教程中,将学习如何使用Oracle DROP TABLE语句删除现有的表。

Oracle DROP TABLE语句简介

要将表移动到回收站或将其从数据库中完全删除,请使用DROP TABLE语句:

DROP TABLE schema_name.table_name

[CASCADE CONSTRAINTS | PURGE];

在这个语句中:

首先,指出要在DROP TABLE子句之后删除的表及其模式。如果不明确指定模式名称,则该语句假定将从模式中删除该表。

其次,指定CASCADE CONSTRAINTS子句删除引用表中主键和唯一键的所有参照完整性约束。 如果存在这种引用完整性约束,并且不使用此子句,Oracle将返回错误并停止删除表。

第三,如果想删除表格并且一次释放与之关联的空间,指定PURGE子句。 通过使用PURGE子句,Oracle不会将表及其依赖对象放入回收站。

请注意,PURGE子句不允许您回滚或恢复删除的表。 因此,如果不希望敏感数据出现在回收站中,这很有用。

Oracle DROP TABLE示例

我们来看看使用DROP TABLE语句的一些例子。

1. 基本的Oracle DROP TABLE示例

以下语句为演示创建persons表:

CREATE TABLE persons (

person_id NUMBER,

first_name VARCHAR2(50) NOT NULL,

last_name VARCHAR2(50) NOT NULL,

PRIMARY KEY(person_id)

);

以下示例从数据库中删除person表:

DROP TABLE persons;

2. Oracle DROP TABLE CASCADE CONSTRAINTS示例

以下语句创建两个名为brands和cars的新表:

CREATE TABLE brands(

brand_id NUMBER PRIMARY KEY,

brand_name varchar2(50)

);

CREATE TABLE cars(

car_id NUMBER PRIMARY KEY,

make VARCHAR(50) NOT NULL,

model VARCHAR(50) NOT NULL,

year NUMBER NOT NULL,

plate_number VARCHAR(25),

brand_id NUMBER NOT NULL,

CONSTRAINT fk_brand

FOREIGN KEY (brand_id)

REFERENCES brands(brand_id) ON DELETE CASCADE

);

在这些表中,每个品牌有一个或更多的汽车,而每辆汽车只有一个品牌。

以下语句尝试删除brands表:

DROP TABLE brands;

Oracle发出以下错误:

ORA-02449: unique/primary keys in table referenced by foreign keys

这是因为brands表的主键当前由cars表中的brand_id列引用。

以下语句返回cars表的所有外键约束:

SELECT

a.table_name,

a.column_name,

a.constraint_name,

c.owner,

c.r_owner,

c_pk.table_name r_table_name,

c_pk.constraint_name r_pk

FROM

all_cons_columns a

JOIN all_constraints c ON

a.owner = c.owner

AND a.constraint_name = c.constraint_name

JOIN all_constraints c_pk ON

c.r_owner = c_pk.owner

AND c.r_constraint_name = c_pk.constraint_name

WHERE

c.constraint_type = 'R'

AND a.table_name = 'CARS';

要删除brands表,必须使用CASCADE CONSTRAINTS子句,如下所示:

DROP TABLE brands CASCADE CONSTRAINTS;

这个语句不仅删除了brands表,而且还删除了cars表中的外键约束fk_brand。

如果再次执行语句以获取cars表中的外键约束,则不会看到任何返回的行。

Oracle DROP TABLE PURGE示例

以下语句使用PURGE子句来删除cars表:

DROP TABLE cars purge;

一次删除多个表

Oracle不提供直接删除多个表的方法。 但是,可以使用以下PL/SQL块来执行此操作:

BEGIN

FOR rec IN

(

SELECT

table_name

FROM

all_tables

WHERE

table_name LIKE 'TEST_%'

)

LOOP

EXECUTE immediate 'DROP TABLE '||rec.table_name || ' CASCADE CONSTRAINTS'

END LOOP;

END;

/

该PL/SQL块将删除名称以TEST_开头的所有表。

要测试此代码,可以先创建三个表:test_1,test_2和test_3,如下所示:

CREATE TABLE test_1(c1 VARCHAR2(50));

CREATE TABLE test_2(c1 VARCHAR2(50));

CREATE TABLE test_3(c1 VARCHAR2(50));

然后,执行上面的PL/SQL块。应该看可以看到,上面创建的三个表均被删除了。

在本教程中,您已学习如何使用Oracle DROP TABLE语句从数据库中删除表。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值