例如有一个表:
test(
id   number(10),
col  clob
)在c#里直接读取时
select col from test where id = 123;
会出现错误,
那如何 读取 clob 里的数据呢,
又如何 修改 clob 里的数据呢??

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/2941/2941226.xml?temp=.5730249
      

  2.   

    下面的 C# 示例阐释如何打开一个临时 LOB。必须在获取临时 LOB 之前开始事务。否则,OracleDataReader 将不能获取后面的数据。
    还可以通过调用 DBMS_LOB.CREATETEMPORARY 系统存储过程并绑定 LOB 输出参数打开 Oracle 中的临时 LOB。在客户端,临时 LOB 的行为很像基于表的 LOB。例如,要更新临时 LOB,它必须包含在事务中。OracleConnection conn = new OracleConnection("server=MyServer; integrated security=yes;");
    conn.Open();
    OracleTransaction tx = conn.BeginTransaction();
    OracleCommand cmd = conn.CreateCommand();
    cmd.Transaction = tx;
    cmd.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;";
    cmd.Parameters.Add(new OracleParameter("tempblob", OracleType.Blob)).Direction = ParameterDirection.Output;
    cmd.ExecuteNonQuery();
    OracleLob tempLob = (OracleLob)cmd.Parameters[0].Value;
    tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
    tempLob.Write(tempbuff,0,tempbuff.Length);
    tempLob.EndBatch();
    cmd.Parameters.Clear();
    cmd.CommandText = "myTable.myProc";
    cmd.CommandType = CommandType.StoredProcedure;  
    cmd.Parameters.Add(new OracleParameter("ImportDoc", OracleType.Blob)).Value = tempLob;
    cmd.ExecuteNonQuery();
    tx.Commit();