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 VIEW 语句

此语句用于在数据库上创建视图。视图用于以一种不同的视角展现数据,即使数据不是以这种方式存储。

语法
CREATE [ OR REPLACE ] VIEW
[ owner.]view-name [ ( column-name, ... ) ]
AS select-statement
[ WITH CHECK OPTION ]
参数
  • OR REPLACE 子句   指定 OR REPLACE (CREATE OR REPLACE VIEW) 将创建一个新视图或替换同名的现有视图。如果使用 OR REPLACE 子句,将保留现有权限。

  • AS 子句   视图所基于的 SELECT 语句。SELECT 语句不能引用局部临时表。另外,SELECT 语句可带 ORDER BY 或 GROUP BY 子句,并且可以是 UNION。但是,在某些情况下(特别是当与 FIRST 或 TOP 子句结合使用时),使用带 ORDER BY 子句的 SELECT 的确会影响视图定义的结果。

  • WITH CHECK OPTION 子句   WITH CHECK OPTION 子句拒绝不满足 SELECT 语句定义的视图条件的任何视图更新和插入。

注释

CREATE VIEW 语句用于以给定名称创建视图。可以通过指定所有者来创建归另一个用户所有的视图。必须具有 DBA 权限才能为另一个用户创建视图。

在 SELECT、DELETE、UPDATE 和 INSERT 语句中,可以使用视图名取代表名。但在数据库中,视图实际上不是以表的形式存在。每次使用时它们就会派生。视图作为 CREATE VIEW 语句中指定的 SELECT 语句的结果派生。视图中使用的表名应该由表所有者的用户 ID 限定。否则,另一个用户 ID 可能无法找到该表或可能得到错误的表。

只要定义视图的 SELECT 语句不包含 GROUP BY 子句、集合函数或不涉及 UNION 子句,就可以更新视图。视图的更新会导致基础表更新。

视图中列的名称在 column-name 列表中指定。如果没有指定列名列表,则视图列名来自选择列表项。选择列表中的所有项都必须具有唯一名称。若要使用选择列表项中的名称,每项必须是一个简单列名或指定了别名。请参见SELECT 语句

通常,视图会引用在目录中定义的表和视图(及其各自的属性)。但视图还可以引用 SQL 变量。在这种情况下,当执行引用视图的查询时,将使用 SQL 变量的值。引用 SQL 变量的视图称为参数化视图,因为这些变量将充当视图执行过程中的参数。

除了在查询中嵌入对等的 SELECT 块主体以作为查询的 FROM 子句中的派生表之外,参数化视图提供了另一种替代方法。参数化视图对于存储过程中内嵌的查询尤为有用,其中,视图中所引用的 SQL 变量即是过程的输入参数。

执行 CREATE VIEW 语句时,不需要 SQL 变量存在。但如果在执行引用该视图的查询时未定义 SQL 变量,则会返回 [未找到列] 错误。

权限

必须有 RESOURCE 权限和视图定义中的表的 SELECT 权限。

副作用

自动提交。

另请参见
标准和兼容性
  • SQL/2003   核心特性。但参数化视图是服务商扩充。

示例

下面的示例将创建一个仅显示男雇员信息的视图。此视图与基表采用相同的列名。

CREATE VIEW MaleEmployees
AS SELECT *
FROM Employees
WHERE Sex = 'M';

以下示例将创建一个显示雇员及其所属部门的视图。

CREATE VIEW EmployeesAndDepartments
  AS SELECT Surname, GivenName, DepartmentName
  FROM Employees JOIN Departments
  ON Employees.DepartmentID = Departments.DepartmentID;

以下示例将替换在上一个示例中创建的 EmployeesAndDepartments 视图。在替换视图后,视图中将显示每位员工所在的城市、州和国家(地区)位置:

CREATE OR REPLACE VIEW EmployeesAndDepartments
  AS SELECT Surname, GivenName, City, State, Country
  FROM Employees JOIN Departments
  ON Employees.DepartmentID = Departments.DepartmentID;

以下示例将基于变量 var1 和 var2 创建一个参数化视图,这两个变量既不是 Employees 表也不是 Departments 表的属性:

CREATE VIEW EmployeesByState
  AS SELECT Surname, GivenName, DepartmentName
  FROM Employees JOIN Departments
  ON Employees.DepartmentID = Departments.DepartmentID
  WHERE Employees.State = var1 and Employees.Status = var2;

在变量为允许的表达式的上下文中,变量可以出现在视图的 SELECT 语句中。例如,下面的参数化视图将参数 var1 用作 LIKE 谓语的模式:

CREATE VIEW ProductsByDescription
  AS SELECT *
  FROM Products
  WHERE Products.Description LIKE var1;

若要使用此视图,则必须在执行引用视图的查询前定义变量 var1。例如,可以将以下内容放置在过程、函数或批处理语句中:

BEGIN
DECLARE var1 CHAR(20);
SET var1 = '%cap%';
SELECT * FROM ProductsByDescription
END