Java 即使在基础表中没有索引的列上也有索引。然后,您可以直接删除此视图中的记录,并具有用于删除基础表中记录的附加触发器。只是一个想法(还没有尝试过)你是说表在id列上甚至没有主键吗?这听起来可能很奇怪,但的确如此!id上没有主键:)具有id但没有主键的表。那只是

Java 即使在基础表中没有索引的列上也有索引。然后,您可以直接删除此视图中的记录,并具有用于删除基础表中记录的附加触发器。只是一个想法(还没有尝试过)你是说表在id列上甚至没有主键吗?这听起来可能很奇怪,但的确如此!id上没有主键:)具有id但没有主键的表。那只是,java,sql,oracle,jdbc,Java,Sql,Oracle,Jdbc,即使在基础表中没有索引的列上也有索引。然后,您可以直接删除此视图中的记录,并具有用于删除基础表中记录的附加触发器。只是一个想法(还没有尝试过)你是说表在id列上甚至没有主键吗?这听起来可能很奇怪,但的确如此!id上没有主键:)具有id但没有主键的表。那只是可怕的数据库设计。没有任何查找可以在这样的表上执行,所以这有什么意义?这使我的工作更加困难。但是这些表来自不同的数据源,我们不维护这些数据源。我不能只是说我没有答案,所以请大家帮忙。如果你可以添加新的数据库对象(而不是修改的数据库对象),你可以



即使在基础表中没有索引的列上也有索引。然后,您可以直接删除此视图中的记录,并具有用于删除基础表中记录的附加触发器。只是一个想法(还没有尝试过)你是说表在
id
列上甚至没有主键吗?这听起来可能很奇怪,但的确如此!id上没有主键:)具有
id
但没有主键的表。那只是可怕的数据库设计。没有任何查找可以在这样的表上执行,所以这有什么意义?这使我的工作更加困难。但是这些表来自不同的数据源,我们不维护这些数据源。我不能只是说我没有答案,所以请大家帮忙。如果你可以添加新的数据库对象(而不是修改的数据库对象),你可以考虑为表添加一个物化视图。与普通视图不同,物化视图甚至可以在基础表中没有索引的列上具有索引。然后,您可以直接删除此视图中的记录,并具有用于删除基础表中记录的附加触发器。这只是甲骨文的一个想法(还没有尝试过),与物品的大小无关。@AlexPoole:谢谢你的提示。是的,我将编辑我的答案。如果版本中的
存在的
版本在性能上不同,我会非常惊讶。对于Oracle,这与项目的大小无关。@AlexPoole:谢谢你的提示。没错,我会编辑我的答案。如果
版本中的
存在的版本性能不同,我会非常惊讶。感谢Alex的回复。尝试使用内置类型实现您的方法,但以“java.sql.SQLException:无法转换为内部表示”结束。使用诸如“ODCINUMBERLIST”和“ODCIVARCHAR2LIST”之类的类型。有什么帮助吗?我的ID不是数字,而是字符串。它们看起来像1:123。@ShivaMothkuri-在createDescriptor调用中,您使用的是ODCIVARCHAR2LIST还是SYS.ODCIVARCHAR2LIST?如何定义Java集合?使用SYS.ODCIVARCHAR2LIST。我的收藏是ArrayList。字符串中的冒号(:)是否会影响某些内容?@ShivaMothkuri-我想您只是缺少一个toArray()调用,无法将ArrayList转换为数组。我在答案中加了这个。哦,是的!你说得对。我错过了一个叫Array()的电话。它正在工作。谢谢通过这种方法,删除是在10000条记录/3秒时完成的。有一件事需要你确认。我是否需要手动删除这些Oracle阵列,否则它们将自动删除?感谢Alex的回复。尝试使用内置类型实现您的方法,但以“java.sql.SQLException:无法转换为内部表示”结束。使用诸如“ODCINUMBERLIST”和“ODCIVARCHAR2LIST”之类的类型。有什么帮助吗?我的ID不是数字,而是字符串。它们看起来像1:123。@ShivaMothkuri-在createDescriptor调用中,您使用的是ODCIVARCHAR2LIST还是SYS.ODCIVARCHAR2LIST?如何定义Java集合?使用SYS.ODCIVARCHAR2LIST。我的收藏是ArrayList。字符串中的冒号(:)是否会影响某些内容?@ShivaMothkuri-我想您只是缺少一个toArray()调用,无法将ArrayList转换为数组。我在答案中加了这个。哦,是的!你说得对。我错过了一个叫Array()的电话。它正在工作。谢谢通过这种方法,删除是在10000条记录/3秒时完成的。有一件事需要你确认。我是否需要手动删除这些Oracle阵列,否则它们将自动删除?
Delete from <table_name> where id=?;
Delete from <table_name> where id in (<CSV>);
                 or
Delete from <table_name> where id in (select id from <temp_table>);
Delete from <table_name> where
    id in (1, 2, 3, ... ,1000)
    or id in (1001, 1002, ... , 2000)
    ....
ArrayDescriptor aDesc = ArrayDescriptor.createDescriptor("SYS.ODCINUMBERLIST",
  conn);
oracle.sql.ARRAY oraIDs = new oracle.sql.ARRAY(aDesc, conn, yourJavaCollectinOfIDs);

cStmt = (OracleCallableStatement) conn.prepareCall(
  "Delete from <table_name> 
   where id in (select column_value from table(?))");
cStmt.setArray(1, oraIDs);
cStmt.execute();
oracle.sql.ARRAY oraIDs = new oracle.sql.ARRAY(aDesc, conn, yourArrayList.toArray());
Delete from <table_name> where id in (select id from <temp_table>);
Delete from <table_name> m where exists (select id from <temp_table> t where m.id = t.id);