分类：电脑/网络-程序设计
问题：100分悬赏！！ORACLE和DB2的问题！！oracle中的b 
中的blob字段和clob字段，我通过程序插入数据时，需要进行多次提交么？ 
回答：Oracle的Lob（包括Clob和Blob）的处理很费劲。如果你要存取的字段的Size小于4K，建议你用string(对应nvarchar2(4096))或者byte[],并且考虑存取时压缩（如果压缩比很大的话）一下。另一个建议是，你既然使用Oracle，必是大的应用系统，大文本最好压缩后用Blob，毕竟占的空间和带宽要小很多，性能提高很明显。如果大于4K的话，存贮时Oracle必须用事务和Select for update语句才能提交，获取时和其他类型一样。我以Oracle data provider（ODP）、C＃和Blob为例给个例子。如果你用ODBC或者OleDB，类似处理，细节查阅一下ODP的文档。最好去下载一下Oracle公司提供的最新的版本。读取很简单：OracleBlob blob = dr.GetOracleBlob(i);byte[] buf;blob.Position = 0;  buf = new byte[blob.Length];blob.Read(buf,0,(int)blob.Length);存储要启动事务：OracleCommand updateCommand=new OracleCommand();OracleCommand selectCommand=new OracleCommand();updateCommand.Connection = selectCommand.Connection = oracleConnection1;// 清除以前的数据updateCommand.CommandType=CommandType.Text;updateCommand.CommandText="UPDATE TableName SET BLOBCol = EMPTY_BLOB() WHERE ……";updateCommand.Prepare();selectCommand.CommandType = CommandType.Text;selectCommand.CommandText = "SELECT BLOBCol FROM TableName WHERE …… FOR UPDATE";selectCommand.Prepare();updateCommand.ExecuteNonQuery();OracleDataReader dr = null;dr = selectCommand.ExecuteReader();if (dr.Read()){  OracleBlob blob = dr.GetOracleBlob(0);  if (blob!=OracleClob.Null)  {    blob.BeginChunkWrite();    blob.Position = 0;    blob.Write(bytes,0,bytes.Length);    blob.EndChunkWrite();    blob.Flush();    blob.Close();  }}要注意捕捉例外，出现例外后要回滚事务。