Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
创建实例化视图。
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 中的对象名称。请参见实例化视图的限制。
SELECT *
CREATE MATERIALIZED VIEW matview AS SELECT * FROM table-name
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/2008 服务商扩充。
以下示例会创建实例化视图,该视图包含 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;