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 的用法 » 创建数据库 » 使用数据库对象 » 使用临时表

 

在过程中引用临时表

如果临时表定义不一致,则在过程之间共享该表会导致出现问题。例如,假设有两个过程 procA 和 procB,这两个过程均定义临时表 temp_table,并调用称为 sharedProc 的另一过程。即未调用 procA,也未调用 procB,所以临时表还不存在。

现在假设 temp_table 在 procA 中的定义与在 procB 中的定义略有不同—两个过程均使用相同的列名称和类型,但列顺序不同。

调用 procA 时,它返回预期结果。但调用 procB 时,它返回不同结果。

这是因为,调用 procA 时,它创建 temp_table,然后调用 sharedProc。调用 sharedProc 时,会解析并验证其中的 SELECT 语句,然后缓存该语句解析后的表示形式,以便再次执行 SELECT 语句。缓存的形式反映 procA 中表定义的列顺序。

调用 procB 时将重新创建 temp_table,但列顺序不同。procB 调用 sharedProc 时,数据库服务器使用 SELECT 语句的缓存表示形式。因此,结果不同。

您可以通过执行以下操作之一避免此问题发生:

  • 确保以此方式使用的临时表定义一致

  • 考虑改用全局临时表