首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SQL命令 DROP VIEW

SQL命令 DROP VIEW

作者头像
用户7741497
发布2022-05-05 10:51:11
发布2022-05-05 10:51:11
9310
举报
文章被收录于专栏:hml_知识记录hml_知识记录

SQL命令 DROP VIEW

删除视图

大纲

代码语言:javascript
复制
DROP VIEW view-name [CASCADE | RESTRICT]

参数

  • view-name 要删除的视图的名称。 视图名可以是限定的(schema.viewname),也可以是非限定的(viewname)。 非限定视图名接受默认模式名。
  • CASCADE RESTRICT - 可选-指定CASCADE关键字以删除引用view-name的任何其他视图。如果有另一个视图引用view-name,则指定RESTRITE将发出SQLCODE-321错误。默认值为限制。

描述

DROP VIEW命令删除视图,但不删除基础表或数据。

也可以使用DropView()方法调用来调用拖放视图操作:

代码语言:javascript
复制
$SYSTEM.SQL.Schema.DropView(viewname,SQLCODE,%msg)

权限

DROP VIEW命令是特权操作。在使用DROP VIEW之前,进程必须拥有指定视图的%DROP_VIEW管理权限或DELETE OBJECT权限。否则将导致SQLCODE-99错误(特权冲突)。可以通过调用%CHECKPRIV命令来确定当前用户是否具有删除权限。可以通过调用$SYSTEM.SQL.Security.CheckPrivileve()方法来确定指定用户是否具有删除权限。如果拥有适当的授予权限,则可以使用GRANT命令分配%DROP_VIEW权限。

在嵌入式SQL中,可以使用$SYSTEM.Security.Login()方法以具有适当权限的用户身份登录:

代码语言:javascript
复制
   DO $SYSTEM.Security.Login("_SYSTEM","SYS")
   &sql(      )

必须具有%Service_Login:Use权限才能调用$SYSTEM.Security.Login方法。

可以删除基于从部署的持久类投影的表的视图。

Nonexistent View

要确定当前命名空间中是否存在指定视图,请使用$SYSTEM.SQL.Schema.ViewExists()方法。

默认情况下,如果尝试删除不存在的视图,DROP VIEW会发出SQLCODE-30错误。要确定当前设置,请调用$SYSTEM.SQL.CurrentSettings(),它显示允许DDL删除不存在的表或视图设置。默认值为0(“否”)。这是此选项的推荐设置。如果设置为1(“Yes”),则为不存在的视图和表发出DROP VIEWDROP TABLE不会执行任何操作,也不会发出错误消息。

在管理门户、系统管理、配置、SQL和对象设置中,通过选中忽略冗余DDL语句复选框,可以在系统范围内设置此选项(以及其他类似的创建、更改和删除选项)。

其他视图引用的视图

如果试图删除其他视图在其查询中引用的视图,DROP VIEW默认情况下会发出SQLCODE-321错误。这就是限制关键字行为。

通过指定CASCADE关键字,可以成功删除其他视图在其查询中引用的视图。删除视图还会删除这些其他视图。如果 IRIS无法执行所有级联视图删除操作(例如,由于SQLCODE-300错误),则不会删除任何视图。

关联查询

删除视图会自动清除所有相关的缓存查询,并清除%SYS.PTools.StatsSQL生成的查询信息。删除视图会自动清除任何相关查询的所有SQL运行时统计信息(SQL Stat)信息。

示例

下面的嵌入式SQL示例创建名为“CityAddressBook”的视图,然后删除该视图。由于它是使用RESTRITE关键字(默认值)指定的,因此如果该视图被其他视图引用,则会发出SQLCODE-321错误:

代码语言:javascript
复制
ClassMethod DropView()
{
    &sql(
        CREATE VIEW CityAddressBook AS
            SELECT Name,Home_Street FROM Sample.Person 
            WHERE Home_City='Boston'
    )
    if SQLCODE=0 { 
        w !,"视图创建" 
    } else { 
        w !,"创建视图错误: ",SQLCODE
        q 
    } 
    /* Use the view */
    n SQLCODE,%msg
    &sql(
        DROP VIEW CityAddressBook RESTRICT
    ) 
    if SQLCODE=0 { 
        w !,"删除视图" 
    } elseif SQLCODE=-30 { 
        w !,"视图不存在",!,%msg 
    } elseif SQLCODE=-321 { 
        w !,"其他视图引用的视图",!,%msg 
    } else { 
        w !,"其他删除视图错误: ",SQLCODE,!,%msg 
    }
}

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQL命令 DROP VIEW
  • 大纲
    • 参数
  • 描述
    • 权限
    • Nonexistent View
    • 其他视图引用的视图
    • 关联查询
  • 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档