删除表
📄字数 1.9K
👁️阅读量 加载中...
一、主要语法结构
1.1 语法格式
1.2 参数说明
IF EXISTS
:预检测表存在性,当表不存在时,仅发出警告E5021- table_name:待删除的表名称
- alter_behavior:指定删除表的迭代性
- 未指定:限制迭代,等同于
RESTRICT
RESTRICT
:限制迭代,对于删除表,若存在依赖项则报告错误CASCADE
:级联迭代,等同于RESTRICT CONSTRAINTS
CASCADE CONSTRAINTS
:级联迭代,对于删除表,若存在依赖项,则删除或禁用每一个依赖项
注意
若待删除表的依赖项也为表,则依赖表不会被删除,仅删除被依赖表。
- 未指定:限制迭代,等同于
PURGE
:指定可选的是否放入回收站,请参阅删表是否进入回收站
1.3 示例
示例1
删除不存在的表。sql-- 不预检测时,报告错误 SQL> DROP TABLE tab_not_exists; Error: [E5021] 表或视图TAB_NOT_EXISTS不存在 -- 预检测时,仅发出警告 SQL> DROP TABLE IF EXISTS tab_not_exists; Warning: [E5021] 表或视图TAB_NOT_EXISTS不存在
示例2
删除存在依赖存储函数的表,尝试非级联删除与级联删除。sql-- 创建表 SQL> CREATE TABLE tab_city(id INTEGER PRIMARY KEY, name VARCHAR); SQL> SELECT ut.table_name,uc.col_name,uc.not_null,uc.def_val,uc.on_null FROM SYS_COLUMNS uc JOIN SYS_TABLES ut ON uc.table_id=ut.table_id WHERE ut.table_name='tab_city'; +------------+----------+----------+---------+---------+ | TABLE_NAME | COL_NAME | NOT_NULL | DEF_VAL | ON_NULL | +------------+----------+----------+---------+---------+ | TAB_CITY | ID | T | <NULL> | 0 | | TAB_CITY | NAME | F | <NULL> | 0 | +------------+----------+----------+---------+---------+ -- 创建依赖存储函数 SQL> CREATE FUNCTION func_city(v_id INTEGER) RETURN VARCHAR AS DECLARE v_name VARCHAR; BEGIN SELECT name INTO v_name FROM tab_city WHERE id=v_id; RETURN v_name; END; / -- 查询表 SQL> SELECT db_id,schema_id,user_id,table_id,table_name FROM all_tables WHERE table_name='tab_city'; +-------+-----------+---------+----------+------------+ | DB_ID | SCHEMA_ID | USER_ID | TABLE_ID | TABLE_NAME | +-------+-----------+---------+----------+------------+ | 1 | 1 | 1 | 1048646 | TAB_CITY | +-------+-----------+---------+----------+------------+ -- 查询存储函数 SQL> SELECT db_id,schema_id,user_id,proc_id,proc_name,valid FROM all_procedures WHERE proc_name='func_city'; +-------+-----------+---------+---------+-----------+-------+ | DB_ID | SCHEMA_ID | USER_ID | PROC_ID | PROC_NAME | VALID | +-------+-----------+---------+---------+-----------+-------+ | 1 | 1 | 1 | 1048648 | FUNC_CITY | T | +-------+-----------+---------+---------+-----------+-------+ -- 非级联删除 SQL> DROP TABLE tab_city; Error: [E5025] 存在对表TAB_CITY依赖的对象 -- 查询表,仍旧存在 SQL> SELECT db_id,schema_id,user_id,table_id,table_name FROM all_tables WHERE table_name='tab_city'; +-------+-----------+---------+----------+------------+ | DB_ID | SCHEMA_ID | USER_ID | TABLE_ID | TABLE_NAME | +-------+-----------+---------+----------+------------+ | 1 | 1 | 1 | 1048646 | TAB_CITY | +-------+-----------+---------+----------+------------+ -- 查询存储函数,仍旧可用 SQL> SELECT db_id,schema_id,user_id,proc_id,proc_name,valid FROM all_procedures WHERE proc_name='func_city'; +-------+-----------+---------+---------+-----------+-------+ | DB_ID | SCHEMA_ID | USER_ID | PROC_ID | PROC_NAME | VALID | +-------+-----------+---------+---------+-----------+-------+ | 1 | 1 | 1 | 1048648 | FUNC_CITY | T | +-------+-----------+---------+---------+-----------+-------+ -- 级联删除 SQL> DROP TABLE tab_city CASCADE; -- 查询表,已被删除 SQL> SELECT db_id,schema_id,user_id,table_id,table_name FROM all_tables WHERE table_name='tab_city'; +-------+-----------+---------+----------+------------+ | DB_ID | SCHEMA_ID | USER_ID | TABLE_ID | TABLE_NAME | +-------+-----------+---------+----------+------------+ +-------+-----------+---------+----------+------------+ -- 查询存储函数,已不可用 SQL> SELECT db_id,schema_id,user_id,proc_id,proc_name,valid FROM all_procedures WHERE proc_name='func_city'; +-------+-----------+---------+---------+-----------+-------+ | DB_ID | SCHEMA_ID | USER_ID | PROC_ID | PROC_NAME | VALID | +-------+-----------+---------+---------+-----------+-------+ | 1 | 1 | 1 | 1048648 | FUNC_CITY | F | +-------+-----------+---------+---------+-----------+-------+