oracle 中的会话级临时表和Spring web中的会话有什么关联?

我在Spring web开发的时候,我的需求如下:

1、A操作人进入页面,请求后端数据,此时会有一部分临时数据放入临时表中,待请求完毕,临时表数据销毁,查询到的数据返回到前端。

2、A操作人再次刷新页面,请求后端数据,此时会有一部分临时数据放入临时表中,待请求完毕,临时表数据销毁,查询到的数据返回到前端。(此步的临时数据应该和第一步的临时数据互不影响

3、B操作人进入页面,请求后端数据,此时会有一部分临时数据放入临时表中,待请求完毕,临时表数据销毁,查询到的数据返回到前端。(此步的临时数据应该和第一步一级第二步的临时数据互不影响

根据以上需求,我使用了oracle会话级的临时表,但是实际运行发现,并非想我想象中的那样互不影响,多个请求(会话时)有可能查询到其他会话的数据,请问oracle中会话级表和web中会话有什么区别,应该如何使用?

首先,需要明确的是,在Oracle中,会话级临时表是与数据库会话相关联的。每个数据库会话均可以访问自己的临时表数据,但其他会话是不能访问其它数据库会话创建的临时表数据的。因此,如果一个会话创建了一个临时表,其他会话是无法访问该临时表的,而如果两个会话同时创建名字相同的临时表,则实际上创建的是两张不同的临时表,互相之间不会有任何影响。

在Spring Web中,会话指的是服务器和客户端之间的一次交互过程,而一个会话对应的是一个HTTPServletRequest对象。因此,每个HTTPServletRequest对象代表一个独立的会话,其对应的临时表也是会话级的,只有该会话可以访问其对应的临时表数据。因此,无论是第一步、第二步还是第三步,每个会话创建的临时表都是相互独立的,不会互相影响。

那么,为什么在实际使用中却发现不符合预期呢?可能的原因在于临时表的创建和销毁时机问题。在Spring Web中,需要保证每个会话只创建一张相应的临时表,并在会话结束时即时销毁临时表,否则会出现不同会话之间的数据混乱。建议使用Spring Web中的Session来管理会话,保证临时表的创建和销毁时机的正确性。