我想使用全局临时表来存储一些昂贵的中间数据。数据是瞬态的,但在 php 会话期间很好,因此使用全局临时表似乎on commit preserve rows
是理想的。
但是.. 看起来全局临时表数据仅对创建它的 oracle 会话可用。
因此,这引发了一个问题,即我如何确保 oci_pconnect 能够返回相同的 oracle 会话,因为我已经读到 oracle 会话对于每个持久连接都是唯一的?我对跨多个 php 执行使用事务不感兴趣,只是临时表。
我正在使用 php 会话,因此可以将其用作选择 oracle 会话的标识符。
到目前为止,这似乎是不可能的,但问一下也无妨。
编辑:实现这一点的预期目的是加速访问我的访问控制中使用的用户组成员信息。
提前解析组成员资格并使用此临时数据代替在所有后续查询中消除了 3 层以上的连接。由于返回的键是RAW
,将它们序列化到外部存储会导致HEXTORAW()
再次调用 on usage ,并且似乎对预期目的没有帮助。
为确定组级别访问而添加的查询部分在会话期间是静态的,并且自行运行会返回大约 600 行唯一的 16 字节RAW
密钥。然后通过链接表将这些键与结果集结合起来,以确定用户是否对结果集具有任何“组级别”权限。
我玩过使用 IN 并将键作为字符串传递,但由于它们是 RAW 键,因此我必须HEXTORAW()
每次查询调用 600 次。性能不如使用临时表和执行JOIN
.
有没有其他方法可以告诉 Oracle 将查询的那部分结果缓存起来,而不是将它们写入“永久”中间结果?