0

我从未使用过全局临时表,但是我有一些疑问,它们将如何在 php 环境中工作。

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

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

4

2 回答 2

3

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

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

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

于 2008-09-23T19:15:18.133 回答
1

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

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

正如这里所写: http ://www.oracle-base.com/articles/8i/TemporaryTables.php

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

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

对不起,我的英语不好。

于 2008-09-23T19:10:48.080 回答