我从未使用全球临时表,但我有一些问题,他们将如何在PHP环境中工作。

如何共享数据:假设使用oci8通过php持久连接到oracle。数据是否与数据库ID绑定?它是基于Apache httpd恶魔完成的吗?或者每个请求都是唯一的?

会话数据何时从全局临时表中清除?我假设(或者更希望)在PHP脚本退出时完成它。或者,如果不是,我假设我需要在脚本退出之前将其删除。

有帮助吗?

解决方案

全局临时表只是表结构的逻辑定义(名称,列名,列数据类型等)。当会话通过插入数据引用它时,会在临时表空间中创建一个数据段,以仅保存该会话的数据。因此,不同的会话可以引用相同的逻辑表定义,因为它们每个都有自己的专用数据段,可以在提交时或会话断开连接时轻松清除,而不会影响其他会话。

GTT中数据的清除可以是提交时,也可以是会话结束时,具体取决于创建它的选项。在任何一种情况下,您都不必在断开连接之前自己进行清洗。

GTT的一个有用的替代方法是子查询因子子句(“WITH”),您可以在其中创建多个关系,这些关系可以引用之前在该SQL语句中声明的那些关系。这些可以在Oracle临时表空间中实现,当它们超过某个内存使用时自动生成,或者通过使用MATERIALIZE优化器提示手动实现。

其他提示

如果我没记错的话,全局临时表中的数据只能从一个活动会话中获得,并且只能用于此活动会话(我的意思是session = connection)。因此,您只能看到在活动会话之前插入的数据。因此我相信,这个数据在结束会议后被清除。无论你使用哪种语言。

至少我是这么认为的。 :d

正如它在这里写的: http://www.oracle-base.com/articles/8i/TemporaryTables。 PHP

全局临时表中的数据是私有的,因此会话插入的数据只能由该会话访问。

临时表中的数据会在数据库会话结束时自动删除,即使它异常结束。

抱歉我的英语不好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top