java - sybase中临时表提交事务

标签 java sql sybase

我正在使用 sybase 临时表方法(# 表名称)进行批量插入。这发生在交易中。然而,此操作正在提交数据事务。 (我自己没有进行连接。提交)。我不希望发生此提交,因为稍后我可能必须回滚整个事务。知道为什么使用临时表插入会在没有询问的情况下提交事务吗?我该如何解决这个问题?

sql 是这样的

select * into #MY_TABLE_BUFFER from MY_TABLE where 0=1; 
load table #MY_TABLE_BUFFER from 'C:\temp\123.tmp' WITH CHECKPOINT ON; 
insert into MY_TABLE on existing update select * from #MY_TABLE_BUFFER; 
drop table #MY_TABLE_BUFFER; 

我正在使用statement.executeUpdate()来执行它

发现这是由于临时表不参与事务并进行提交所致。 有什么解决办法吗?

最佳答案

Sybase 的有趣之处在于,将用户指定的(也称为显式)事务与 #temp 表(临时表是在事务中创建的)结合使用。无论好坏,Sybase 都将 #temp 表的创建(包括通过“select into”语句)视为 tempdb 上下文中的 DDL 语句。在编辑器中,使用默认服务器/数据库设置,执行此操作时会收到错误消息。

作为测试,您可以尝试将“ddl in tran”设置(在 tempdb 数据库的上下文中)设置为 true。然后,查看行为是否发生变化。

但是请注意,永久保留该设置不是一个好主意(根据 Sybase 文档)。我建议它仅用于调查目的。

真正的解决方案(如果我对问题的假设是正确的)可能在于首先创建#temp表,然后开始事务,以避免事务范围内的任何DDL stmts。

关于java - sybase中临时表提交事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6610379/

相关文章:

mysql - 除以第二个查询

sql - 需要帮助调整 sql 查询

sql - CASE 语句中 WHEN 子句的执行顺序

java - 如何让你的应用程序谷歌搜索一些东西?

java - 数据库连接匮乏

sql - ORA-29024 : Certificate validation failure

sql游标只返回一个值

java - 从 SQL DDL 语句创建 Java 对象

java - Android 读取大文件导致应用程序崩溃

java - Saml HTTP-POST 和 HTTP-POST-SimpleSign 绑定(bind)之间的差异