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 的用法 » 查询处理 » 查询优化与执行 » 语义查询转换

 

内置简单的系统过程

在查询的 FROM 子句中调用系统过程时,如果该过程仅定义为主体中的一条 SELECT 语句,则有时会内置该过程。即,查询会被重写以等同于初始查询,但却没有过程定义。内置该过程时,它会被重写为派生表。如果过程使用缺省参数,或它在主体中包含一条 SELECT 语句之外的任何内容,则不会内置该过程。

例如,假定您创建了以下过程:

CREATE PROCEDURE Test1( arg1 INT )
 BEGIN
  SELECT * FROM Employees WHERE EmployeeID=arg1
 END;

现在假定您在查询的 FROM 子句中调用该过程,如下所示:

SELECT * FROM Test1( 200 );

数据库服务器可能按如下方式重写该查询:

SELECT * FROM ( SELECT * FROM Employees WHERE EmployeeID=CAST( 200 AS INT ) ) AS Test1;
另请参见