爱问知识人 爱问教育 医院库

100分悬赏!!ORACLE和DB2的问题!!

首页

100分悬赏!!ORACLE和DB2的问题!!

oracle中的blob字段和clob字段,我通过程序插入数据时,需要进行多次提交么? 

提交回答
好评回答
  • 2018-04-04 08:39:56
      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(); } } 要注意捕捉例外,出现例外后要回滚事务。 。

    哎***

    2018-04-04 08:39:56

其他答案

    2018-04-04 12:39:56
  • 不需要

    吕***

    2018-04-04 12:39:56

  • 2018-04-04 12:39:56
  • 应该是你操作问题

    李***

    2018-04-04 12:39:56

  • 2018-04-04 12:39:56
  •   
    去那里看看

    张***

    2018-04-04 12:39:56

  • 2018-04-04 12:39:56
  • oracle没有学过~你可以去  去问问看

    王***

    2018-04-04 12:39:56

  • 2018-04-04 11:39:56
  • 不需要!

    X***

    2018-04-04 11:39:56

  • 2018-04-04 11:39:56
  • no

    恋***

    2018-04-04 11:39:56

  • 2018-04-04 11:39:56
  • 不需要

    曾***

    2018-04-04 11:39:56

  • 2018-04-04 11:39:56
  • 不需要的。

    小***

    2018-04-04 11:39:56

  • 2018-04-04 10:39:56
  • 需要

    齐***

    2018-04-04 10:39:56

  • 2018-04-04 10:39:56
  • 正常
    

    M***

    2018-04-04 10:39:56

  • 2018-04-04 10:39:56
  • 是你输入的时候少了“<>”

    y***

    2018-04-04 10:39:56

  • 2018-04-04 10:39:56
  • 朋友我建议你用GOOGLE查一查会有结果的!!!
    朋友我建议你用GOOGLE查一查会有结果的!!!
    朋友我建议你用GOOGLE查一查会有结果的!!!

    本***

    2018-04-04 10:39:56

  • 2018-04-04 09:39:56
  •   读取很简单:
    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(); } } 要注意捕捉例外,出现例外后要回滚事务。 。

    X***

    2018-04-04 09:39:56

  • 2018-04-04 08:39:56
  • 没必要

    承***

    2018-04-04 08:39:56

  • 2018-04-04 08:39:56
  • 不需要的,只是你可能插入的不正确引起的。

    厌***

    2018-04-04 08:39:56

  • 2018-04-04 07:39:56
  •   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(); } } 要注意捕捉例外,出现例外后要回滚事务。 。

    这***

    2018-04-04 07:39:56

类似问题

换一换

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):