Oracle全球临时表/ PHP交互问题

时间:2020-03-06 14:37:11  来源:igfitidea点击:

我从未使用过Global Temporary Tables,但是我有一些疑问,它们如何在php环境中工作。

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

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

解决方案

如果我没记错的话,全局临时表中的数据仅可用于一个活动会话,并且仅可用于该活动会话(我的意思是会话=连接)。因此,我们只能看到活动会话中之前插入的数据。因此,我相信,关闭会话后将清除此数据。无论我们使用哪种语言。

至少我是这样认为的。 :D

就像在这里写的那样:
http://www.oracle-base.com/articles/8i/TemporaryTables.php

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

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

对不起,我的英语不好。

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

GTT中的数据清除可以在提交时或者在会话结束时进行,具体取决于创建数据的选项。无论哪种情况,在断开连接之前,我们都不必自己进行清洗。

GTT的有用替代方法是子查询分解子句(" WITH"),我们可以在其中创建多个关系,这些关系可以引用该SQL语句中先前声明的那些关系。当它们超过一定的内存使用量时,它们可以由Oracle自动实现为临时表空间中的数据段,也可以使用MATERIALIZE优化器提示手动实现。