日期:2014-05-17  浏览次数:20675 次

有一大堆UPDATE,怎么写效率才高?
ORACLE 10G
下面SQL由程序自动生成,个数是不确定的。
update tb set abc='123' where id=1
update tb set abc='12sdf3' where id=12
update tb set abc='qwe' where id=221
update tb set abc='1s' where id=35351
.....

怎么写个东东访问一次数据库一次性搞定?

------解决方案--------------------
1. 很简单啊,写个存储过程,将这些SQL语句以数据的形式传到存储过程中。
2. 在存储过程中使用循环读出每条SQL语句,然后使用动态SQL来执行。最后commit
------解决方案--------------------
参考下面这个逻辑,一次提交
SQL code
String sql = "update ADJUST set alpha=@alpha where systemMark='a' and orderid=@orderid";
OracleTransaction tx = new OracleTransaction();
tx.begin();
OracleCommand = new OracleCommand(conn, sql);
for (int i = 0; i<10000; i++)
{
  OracleParameter[] params = new OracleParameter[2];
  params[0] = cmd.Parameters.Add(..)
  params[1] = cmd.Parameters.Add(..)
  rowsAffected = cmd.ExecuteNonQuery();
  cmd.Parameters.Clear();
  if ((i+1) % 1000 ==0)
  {
  tx.commit();
  tx.begin();
  }
}
tx.commit();