Java过程中的临时表(Oracle DB)

Java过程中的临时表(Oracle DB),java,sql,oracle,Java,Sql,Oracle,我在使用临时表将java过程的输出结果存储在Oracle DB中时遇到了一个问题 Connection connection = DriverManager.getConnection("jdbc:default:connection:"); ... st.executeUpdate("CREATE GLOBAL TEMPORARY TABLE TT1 (id NUMBER, name VARCHAR2(10)) ON COMMIT DELETE ROWS"); st.executeUpdate

我在使用临时表将java过程的输出结果存储在Oracle DB中时遇到了一个问题

Connection connection =
DriverManager.getConnection("jdbc:default:connection:");
...
st.executeUpdate("CREATE GLOBAL TEMPORARY TABLE TT1 (id NUMBER, name VARCHAR2(10)) ON COMMIT DELETE ROWS");
st.executeUpdate("INSERT INTO TT1 VALUES (1, 'Scott')");
...
执行过程后,我想使用SQL代码管理临时表中的数据,但临时表“不存在”。它是否因为我用java进行了提交而被删除

我试着创建一个带有oncommit-PRESERVE行的表,但得到了相同的结果。
是因为java正在另一个会话中运行吗?

实际上,有两种类型的临时表。。 1.特定交易 2.特定会议

在上面的示例中,当从临时表中删除对DB表的u commit更改时,您正在使用特定于事务的临时表。

当您创建带有ON COMMIT PRESERVE行的表时,您正在处理特定于会话的表,因此您需要在同一会话中进行更改

这是因为临时表只在连接连接时持续。我建议将所有数据库工作转移到Oracle存储过程中,并将最终结果发送到java。commit不会删除该表,但由于ON commit DELETE ROWS子句,表中的数据将被删除。它也仅对同一会话可见,因此如果使用连接池和/或释放连接池之间的连接,则使用“保留行”时可能仍然看不到数据。但真正需要GTT是不寻常的,如果确实需要GTT,则不应在运行时创建GTT。转而考虑使用集合,但不清楚您真正想做什么。