甲骨文 Gobal 临时表问题



我正在使用JdbcTemplate和Oracle存储过程。在 oracle 存储过程中,我有一个选择查询,其中我有像 'IN (SELECT ID FROM GLOBAL_TEMP_TABLE)' 这样的 IN 子句。而临时表的定义是ON COMMIT PRESERVE ROWS

但是,当我从 java 调用存储过程时,它给我的记录比我预期的要多,似乎临时表正在存储来自上一个会话的数据。需要你的帮助。

不看任何代码,很难说。

但是,您描述的症状可能只是因为您仍在从同一会话访问数据。

从 Oracle-Base: 全局临时表 (GTT(:

  • ON COMMIT DELETE ROWS子句指示应在事务结束时删除数据。
  • ON COMMIT PRESERVE ROWS子句指示行应保留到会话结束

也就是说,在您的情况下,您需要关闭会话以清除数据。

全局临时表中选择行时,无法访问上一个会话或其他会话中的数据。有 2 个选项:

  1. 您的会话不是新的
  2. 这不是临时表

请记住,如果您使用ON COMMIT PRESERVE ROWS则必须自己删除行。数据将一直保留到会话结束。

要了解您的会话是否仍然相同,请按以下方式进行查询:

select sid,serial,logon_time from v$session 

并将其写入日志文件。

最新更新