南大通用GBase8s 常用SQL语句(108)

    1. CREATE VIEW 语句

使用 CREATE VIEW 语句创建新的视图,该视图基于驻留在数据库(或本地数据库服务器或不同的数据库服务器中的另一个数据库)中的一个或多个现有表和视图。

语法

 

元素

描述

限制

语法

column

在此处声明的视图中的列的名称。缺省值是 SELECT 投影列表中的名称。

请参阅命名视图列。

标识符

owner

视图的所有者。如果省略,缺省为发出此语句的用户 ID 。

要指定另一个用户 ID 需要 DBA 存取权限。

所有者名称

row_type

已归类的视图的已命名行类型

必须已经在数据库中存在

数据类型

view

在此处声明的视图名称

在数据库中的视图、表、序列和同义词名称中必须唯一。

标识符

用法

视图是虚拟的表,由 SELECT 语句定义。除了以下列表中列出的语句,您可以在任何表名称在语法上有效的 SQL 语句中指定视图的名称或同义词:

  1. ALTER FRAGMENT
  2. CREATE INDEX
  3. CREATE TABLE
  4. CREATE TRIGGER
  5. RENAME TABLE
  6. START VIOLATIONS TABLE
  7. STOP VIOLATIONS TABLE
  8. TRUNCATE
  9. UPDATE STATISTICS

当您使用 CREATE TRIGGER 语句在视图上定义 INSTEAD OF 触发器时必须指定视图的名称,但是此语法和功能与定义在表上的触发器不同。

通过视图更新禁止在 INSERT 、DELETE 或 UPDATE 语句中使用非可更新视图(其中其它视图是有效的)。

要创建视图,您必须拥有对从中派生视图的所有列的 Select 特权。您可以如同表一样查询视图,并且在以下情况下可如同表一样更新视图,但视图并不是表。

如果您包含可选的 IF NOT EXISTS 关键字,当指定名称的视图已经在当前数据库中注册过,或者指定名称是当前数据库中表、同义词或序列对象的标识符,则数据库服务器不会执行任何操作(而不是向应用程序发送异常)。

视图是由视图定义中的 SELECT 语句在每次查询中引用该视图时返回的行和列的集合组成。

在一些情况下,数据库服务器将用户的 SELECT 语句同定义视图的 SELECT 语句合并,然后执行组合语句。在其它情况下,如果视图定义的复杂性导致数据库服务器创建了一个临时表(称为实现的视图)。有关实现的视图的更多信息,请参阅 GBase 8s 性能指南

视图反映了对底层表的更改,但是有两个例外:

  1. 如果 SELECT * 规范定义了视图,则视图中只有那些在由 CREATE VIEW 定义视图时存在于底层表中的列。随后使用 ALTER TABLE 语句添加到底层表的任何新的列不会出现在该视图中。
  2. 如果 GRANT 或 REVOKE 语句修改了视图定义中引用的表上的自由访问权,则数据库服务器不会将这些存取特权应用到视图上。

要强制将对基础表的访问权限或模式的修改应用于视图,你可以使用 DROP VIEW 和 CREATE VIEW 语句删除并重建此视图。还可以使用 CREATE VIEW 和 CREATE TRIGGER 语句分别重建 DROP VIEW 语句销毁的任何相关视图或 INSTEAD OF 触发器。

视图继承了从中派生视图的表的列的数据类型。数据库服务器通过表达式的特性确定虚拟列的数据类型。

SELECT 语句存储于 sysviews 系统目录表中。当您随后在另一个语句中引用视图的时候,数据库服务器会在执行新语句的同时执行定义 SELECT 语句的操作。

在 DB-Access 中,如果在 CREATE SCHEMA 语句外创建视图,那么在使用 -ansi 标志或设置 DBANSIWARN 环境变量的情况下,将会收到警告。

下面的语句创建一个基于 person 表的视图。创建类似这样的没有 OF TYPE 子句的视图时,该视图称为未归类的视图

CREATE VIEW v1 AS SELECT * FROM person;

已归类的视图

如果您对已命名的 ROW 类型拥有 Usage 特权,或者您是其所有者或 DBA ,则您可以创建已归类的视图 。如果忽略 OF TYPE 子句,则认为视图中的行是未归类的,并且缺省为一个未命名的 ROW 类型。

如果类型表,已归类的视图是基于命名的 ROW 类型。视图中的每个列相当于命名的 ROW 类型中的一个字段。下面的语句创建了一个基于表 person 的已归类的视图。

CREATE VIEW v2 OF TYPE person_t AS SELECT * FROM person;

要创建已归类的视图,必须包括 OF TYPE 子句。当创建一个已归类的视图时,紧跟在 OF TYPE 关键字之后指定的命名的 ROW 类型必须已存在。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值