Oracle删除表 |
您所在的位置:网站首页 › oracle删除部分数据语句 › Oracle删除表 |
在本教程中,将学习如何使用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示例以下CREATE 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语句从数据库中删除表。 上一篇: Oracle表添加列 下一篇: Oracle删除列 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |