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

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 存储过程和触发器 » 使用过程、触发器和批处理 » 从过程返回结果

 

从过程返回可变结果集

RESULT 子句在过程中是可选的。通过省略 RESULT 子句,可以编写返回不同结果集的过程,结果集中可以有不同数目或类型的列,具体情况取决于过程的执行方式。

如果不使用可变结果集功能,则出于性能方面的原因,应使用 RESULT 子句。

例如,如果输入变量为 Y,以下过程返回两列,否则只返回一列。



CREATE PROCEDURE Names( IN formal char(1) )
BEGIN
   IF formal = 'y' THEN
      SELECT Surname, GivenName
      FROM Employees
   ELSE
      SELECT GivenName
      FROM Employees
   END IF
END;

创建不带 RESULT 子句的过程并且过程返回可变结果集时,引用该过程的 SELECT 语句的 DESCRIBE 可能失败。为防止 DESCRIBE 失败,建议包括描述预期结果集模式的 WITH 子句。

过程中可变结果集的使用受到某些限制,具体限制取决于客户端应用程序所使用的接口。

  • 嵌入式 SQL   要获取正确形式的结果集,必须在打开用于结果集的游标之后、但在返回任何行之前对过程调用执行 DESCRIBE。

    有关 DESCRIBE 语句的详细信息,请参见DESCRIBE 语句 [Interactive SQL]

  • ODBC   ODBC 应用程序可以使用可变结果集过程。SQL Anywhere ODBC 驱动程序会对可变结果集进行适当的描述。

  • Open Client 应用程序   Open Client 应用程序可以使用可变结果集过程。SQL Anywhere 会对可变结果集进行适当的描述。