如果临时表定义不一致,则在过程之间共享该表会导致出现问题。例如,假设有两个过程 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 语句的缓存表示形式。因此,结果不同。
可以通过执行以下操作之一避免此情况发生:
确保以此方式使用的临时表定义一致
改用全局临时表
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |