我从未使用全球临时表,但我有一些问题,他们将如何在PHP环境中工作。
如何共享数据:假设使用oci8通过php持久连接到oracle。数据是否与数据库ID绑定?它是基于Apache httpd恶魔完成的吗?或者每个请求都是唯一的?
会话数据何时从全局临时表中清除?我假设(或者更希望)在PHP脚本退出时完成它。或者,如果不是,我假设我需要在脚本退出之前将其删除。
答案 0 :(得分:3)
全局临时表只是表结构的逻辑定义(名称,列名,列数据类型等)。当会话通过插入数据引用它时,会在临时表空间中创建一个数据段,以仅保存该会话的数据。因此,不同的会话可以引用相同的逻辑表定义,因为它们每个都有自己的专用数据段,可以在提交时或会话断开连接时轻松清除,而不会影响其他会话。
GTT中数据的清除可以是提交时,也可以是会话结束时,具体取决于创建它的选项。在任何一种情况下,您都不必在断开连接之前自己进行清洗。
GTT的一个有用的替代方法是子查询因子子句(“WITH”),您可以在其中创建多个关系,这些关系可以引用先前在该SQL语句中声明的那些关系。这些可以在Oracle临时表空间中实现,当它们超过某个内存使用时自动生成,或者通过使用MATERIALIZE优化器提示手动实现。
答案 1 :(得分:1)
如果我没记错的话,全局临时表中的数据只能从一个活动会话中获得,并且只能用于此活动会话(我的意思是session = connection)。因此,您只能看到在活动会话之前插入的数据。因此我相信,这个数据在结束会议后被清除。无论你使用哪种语言。
至少我是这么认为的。 :d
正如它在这里写的: http://www.oracle-base.com/articles/8i/TemporaryTables.php
全局临时表中的数据是私有的,因此会话插入的数据只能由该会话访问。
临时表中的数据会在数据库会话结束时自动删除,即使它异常结束。
抱歉我的英语不好。