DROP VIEW
从数据库中删除视图。可以使用一条 DROP VIEW 命令删除多个视图。此命令无法撤消。
所需的权限
以下是 DROP VIEW 所需的权限:
Superuser
具有 DROP VIEW 权限的用户
视图拥有者
语法
DROP VIEW [ IF EXISTS ] name [, ... ] [ CASCADE | RESTRICT ]
参数
- IF EXISTS
-
一个子句,指示如果指定的视图不存在,则命令不应进行任何更改,并返回一条指示视图不存在的消息,而不是以错误终止。
此子句在编写脚本时很有用,可使在 DROP VIEW 针对不存在的视图运行时脚本不会失败。
- 名称
-
要删除的视图的名称。
- CASCADE
-
一个子句,用于指示自动删除依赖该视图的对象,例如其他视图。
要使创建的视图不依赖于其他数据库对象(例如视图和表),请在定义视图时包括 WITH NO SCHEMA BINDING 子句。有关更多信息,请参阅 CREATE VIEW。
请注意,如果您包含 CASCADE 参数并且删除的数据库对象数不少于十个,则数据库客户端可能不会在摘要结果中列出所有已删除的对象。这通常是因为 SQL 客户端工具对返回的结果数有默认限制。
- RESTRICT
-
一个子句,指示如果任何对象依赖该视图,则不删除该视图。此操作是默认操作。
示例
以下示例删除名为 event 的视图:
drop view event;
要删除具有依赖项的视图,请使用 CASCADE 选项。例如,假如我们从名为 EVENT 的表开始。接下来,我们使用 CREATE VIEW 命令创建 EVENT 表的 eventview 视图,如以下示例所示:
create view eventview as select dateid, eventname, catid from event where catid = 1;
现在,我们创建另一个名为 myeventview 的视图,该视图基于第一个视图 eventview:
create view myeventview as select eventname, catid from eventview where eventname <> ' ';
此时创建了两个视图:eventview 和 myeventview。
myeventview 视图是以 eventview 为父视图的子视图。
要删除 eventview 视图,要使用的命令如下:
drop view eventview;
请注意,如果您在这种情况下运行此命令,会收到以下错误:
drop view eventview; ERROR: can't drop view eventview because other objects depend on it HINT: Use DROP ... CASCADE to drop the dependent objects too.
要对此进行补救,请执行以下命令(按照错误消息中的建议):
drop view eventview cascade;
现在,已成功删除 eventview 和 myeventview。
以下示例删除 eventview 视图(如果存在);如果不存在该视图,则不执行任何操作并返回一条消息:
drop view if exists eventview;