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 的用法 » 存储过程和触发器 » 使用过程、触发器和批处理 » 过程和触发器的结构

 

为过程声明参数

过程参数在 CREATE PROCEDURE 语句中以列表形式出现。参数名必须符合其它数据库标识符(如列名)的规则。它们必须具有有效数据类型(请参见SQL 数据类型),并且可以用关键字 IN、OUT 或 INOUT 作为前缀。缺省情况下,参数是 INOUT 参数。这些关键字具有以下含义:

  • IN   此参数是一个为过程提供值的表达式。

  • OUT   此参数是一个可由过程为其赋值的变量。

  • INOUT   此参数是一个为过程提供值的变量,并且可以由过程为其赋予新值。

可以在 CREATE PROCEDURE 语句中将缺省值指派给过程参数。缺省值必须是常量,可以是空值。例如,以下过程对一个 IN 参数使用 NULL 缺省值,来避免执行没有任何意义的查询:

CREATE PROCEDURE CustomerProducts(
      IN customer_ID
                  INTEGER DEFAULT NULL )
RESULT ( product_ID INTEGER,
         quantity_ordered INTEGER )
BEGIN
   IF customer_ID IS NULL THEN
      RETURN;
   ELSE
      SELECT    Products.ID,
               sum( SalesOrderItems.Quantity )
        FROM   Products,
                 SalesOrderItems,
               SalesOrders
      WHERE SalesOrders.CustomerID = customer_ID
      AND SalesOrders.ID = SalesOrderItems.ID
      AND SalesOrderItems.ProductID = Products.ID
      GROUP BY Products.ID;
   END IF;
END;

以下语句指派 DEFAULT NULL,当遇到该值时,过程会返回而不执行查询。

CALL CustomerProducts();