我有没有唯一索引元组的表,假设表有记录
A->B->Status
A->C->Status
A->B->Status
A->B->Status
A->C->Status
我得到第一和第二条记录,处理它们。之后我想只更新这两个记录
如何在java应用层实现此过程?
由于没有任何唯一索引tupples,我不能将update SQL与正确的WHERE子句
一起使用使用 Spring 3.XX Oracle 11g
答案 0 :(得分:3)
我想你可能会尝试使用ROWID
伪列。
对于数据库中的每一行,ROWID
伪列返回行的地址。 Oracle数据库rowid值包含查找行所需的信息:
通常,rowid值唯一标识数据库中的行。但是,同一群集中存储在一起的不同表中的行可以具有相同的rowid。
SELECT ROWID, last_name
FROM employees
WHERE department_id = 20;
行的rowid
保持不变,即使行迁移也是如此。
答案 1 :(得分:2)
您可以使用可更新的结果集来解决此问题。此功能依赖于rowid来执行所有修改(删除/更新/插入)。
这是一个突出显示功能本身的摘录:
String sqlString = "SELECT EmployeeID, Name, Office " +
" FROM employees WHERE EmployeeID=1001";
try {
stmt = con.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery(sqlString);
//Check the result set is an updatable result set
int concurrency = rs.getConcurrency();
if (concurrency == ResultSet.CONCUR_UPDATABLE) {
rs.first();
rs.updateString("Office", "HQ222");
rs.updateRow();
} else {
System.out.println("ResultSet is not an updatable result set.");
}
rs.close();
} catch(SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
}
这是一个完整的example。