Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 语句 » SQL 语句 (A-D)

 

CREATE MATERIALIZED VIEW 语句

此语句用于创建实例化视图。

语法
CREATE MATERIALIZED VIEW 
[ owner.]materialized-view-name [ ( alt-column-names, ... ) ]
[ IN dbspace-name ]
AS select-statement
[ CHECK { IMMEDIATE | MANUAL } REFRESH ]
alt-column-names :
( column-name [,...] )
参数
  • alt-column-names   此子句用于指定实例化视图中列的替代名称。如果指定替代列名称,则 alt-column-names 中列出的列数必须与 select-statement 中的列数相匹配。如果不指定替代列名称,则其名称设为 select-statement 中的名称。

  • IN 子句   此子句用于指定要在其中创建实例化视图的 dbspace。如果不指定此子句,则会在 default_dbspace 选项指定的 dbspace 中创建实例化视图。否则,使用系统 dbspace。有关详细信息,请参见使用附加 dbspace

  • AS 子句   此子句采用 SELECT 语句的格式,指定用于填充实例化视图的数据。实例化视图定义只能引用基表,不能引用视图、其它实例化视图或临时表。select-statement 必须包含列名或具有指定的别名。如果指定 alt-column-names,则使用这些名称,而不使用 select-statement 中指定的别名。

    必须显式指定 SELECT 语句中的列名,不能使用 SELECT * 结构。例如,不能指定 CREATE MATERIALIZED VIEW matview AS SELECT * FROM table-name。另外还应完全限定 select-statement 中的对象名称。请参见实例化视图的限制

  • CHECK 子句   使用此子句,不实际创建视图即可校验语句。指定 CHECK 子句时:

    • 数据库服务器执行常规语言检查(不使用此子句执行 CREATE MATERIALIZED VIEW 会执行常规语言检查),并按平常的方式返回生成的所有错误。

    • 数据库服务器不实际创建视图。这意味着不会生成某些创建时出现的错误。例如,不会生成表示指定的视图名称已存在这样的错误。这样您就可以使用 CHECK 子句测试对视图定义的预期更改,而不会产生视图命名冲突。

    • 如果使用 CHECK IMMEDIATE REFRESH,则数据库服务器校验语法是否对立即视图有效,并返回所有错误。

    • 数据库不会发生任何更改,事务日志中不记录任何内容。

    • 语句开始执行时有一个隐式提交,结束时有一个回退,释放执行过程中获取的所有锁。

注释

创建实例化视图时,该视图为手动视图且未初始化。即视图具有手动刷新类型,但尚未刷新(用数据填充)。要初始化视图,请执行 REFRESH MATERIALIZED VIEW 语句或使用 sa_refresh_materialized_views 系统过程。请参见REFRESH MATERIALIZED VIEW 语句sa_refresh_materialized_views 系统过程

可以加密实例化视图、更改其 PCTFREE 设置、更改其刷新类型,以及通过优化程序启用或禁用该视图的使用。但是,必须先创建实例化视图,然后才能使用 ALTER MATERIALIZED VIEW 更改这些设置。实例化视图创建时的缺省值为:

  • NOT ENCRYPTED

  • ENABLE USE IN OPTIMIZATION

  • 根据数据库页面大小设置 PCTFREE:页面大小为 4 KB,则设为 200 个字节;页面大小为 2 KB,则设为 100 个字节。

  • MANUAL REFRESH

创建实例化视图时,有几个数据库和服务器选项必须有效。请参见实例化视图的限制

sa_recompile_views 系统过程不影响实例化视图。

权限

必须具有 RESOURCE 权限和实例化视图定义中的表的 SELECT 权限。要为其他用户创建实例化视图,还必须具有 DBA 权限。

副作用

执行过程中,CREATE MATERIALIZED VIEW 语句会对实例化视图所引用的所有表执行独占锁定,而不会阻塞。如果有一个引用表无法锁定,则语句执行失败并会返回错误。

另请参见
标准和兼容性
  • SQL/2003   服务商扩充。

示例

以下示例会创建实例化视图,该视图包含 SQL Anywhere 示例数据库中关于雇员的保密信息。随后必须执行 REFRESH MATERIALIZED VIEW 语句,才能初始化视图以供使用,如下例所示。

CREATE MATERIALIZED VIEW EmployeeConfid2 AS
SELECT EmployeeID, Employees.DepartmentID, 
    SocialSecurityNumber, Salary, ManagerID, 
    Departments.DepartmentName, Departments.DepartmentHeadID
FROM Employees, Departments
WHERE Employees.DepartmentID=Departments.DepartmentID;
REFRESH MATERIALIZED VIEW EmployeeConfid2;