我已经读过,在会话表中,数据在提交过程中仍然存在。用Ask Tom的话来说。
ON COMMIT PRESERVE ROWS使这个会话成为临时会议 表。在注销之前,行将保留在此表中。只有我能看到 尽管如此,即使在我之后也没有其他会话会看到“我的”行 提交
这里的问题短语是“直到注销”。以Web应用程序为例,该应用程序与DB保持单一连接。因此,这意味着登录到Web应用程序的所有用户将共享相同的数据库会话。那么,这是否意味着所有用户都会在该临时表中看到相同的内容?
在实际的Web应用程序中,我们通常会维护多个数据库连接。这些连接保存在“池”中,并且可以为许多用户重用它们。在这种情况下,行为可能非常不稳定,用户可能会查看上一个用户填充的数据。
答案 0 :(得分:7)
这也是Oracle提供“ON COMMIT DELETE ROWS”选项的原因。
全局临时表中的数据可以具有会话范围(即ON COMMIT PRESERVE ROWS)或事务范围(ON COMMIT DELETE ROWS)。
显然,在连接池和共享服务器/共享会话的情况下,您需要事务范围(ON COMMIT DELETE ROWS)。
希望有所帮助。