DROP VIEW - Amazon Redshift

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 <> ' ';

此时创建了两个视图:eventviewmyeventview

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;

现在,已成功删除 eventviewmyeventview

以下示例删除 eventview 视图(如果存在);如果不存在该视图,则不执行任何操作并返回一条消息:

drop view if exists eventview;