怎么取出oracle clob里面的数据啊 求求求~啊啊啊啊oracle clob 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Oracle中若以字符串的形式写入数据到Clob字段中,默认的长度为4000,最大可存储4G。 直接将字符串写入Clob字段中,则最大可写4000个字节;若要写入大的字符数据,可以将字符数据以二进制流的形式写入。写入Clob(Blob代码):OracleConnection conn = new OracleConnection(GetConfigUserConnectionString()); conn.Open(); OracleTransaction tran = conn.BeginTransaction(); string id = string.Empty; OracleCommand command = null; try { command = new OracleCommand(); command.Connection = conn; double scale = 0; if (ct.Scale.IndexOf(":") == -1) { scale = BasicOperate.GetDouble(ct.Scale, true); } else { scale = BasicOperate.GetDouble(ct.Scale.Substring(ct.Scale.IndexOf(":") + 1), true); }//在插入时先存一个空的empty_clob()[empty_blob()] command.CommandText = string.Format(@"insert into chart(chartname,charttype,source,scale,producttime," +"xml_definition) values('{0}','{1}','{2}',{3},'{4}',empty_clob()) " +"returning chartid into :rid", ct.ChartName, ct.ChartType, ct.Source, scale, ct.ProductTime, ct.xmlDefinition); command.Parameters.Add("rid", OracleDbType.Varchar2, 32).Direction = ParameterDirection.Output; command.ExecuteNonQuery(); id = command.Parameters["rid"].Value.ToString();//读入clob字段进行编辑 command.CommandText = string.Format("select xml_definition from chart where chartid='{0}' for update", id); using (OracleDataReader reader = command.ExecuteReader()) { while (reader.Read()) { OracleClob clob = reader.GetOracleClob(0);//读入二进制对性 clob.Erase();//清空其中的数据 clob.Position = 0; clob.BeginChunkWrite();//开始写入 int buffersize = 100; int retval = 0; byte[] bts = new byte[buffersize];//将字符串序列化为二进制流 MemoryStream stream = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, ct.xmlDefinition);//将二进制流写入Clob字符中 stream.Seek(0, SeekOrigin.Begin); retval = stream.Read(bts, 0, buffersize); while (retval == buffersize) { clob.Write(bts, 0, buffersize); retval = stream.Read(bts, 0, buffersize); } clob.Write(bts, 0, 100); clob.EndChunkWrite();//结束写入 clob.Flush();//刷新 clob.Close();//关闭 } reader.Close(); } tran.Commit(); } catch (Exception ex) { tran.Rollback(); //throw new Exception(ex.Message); } finally { if (conn.State == ConnectionState.Open) { conn.Close(); } }读取Clob(blob)字段: using (OracleDataReader reader = command.ExecuteReader()) { while (reader.Read()) { OracleClob clob = reader.GetOracleClob(0);//读取二进制字段 clob.Position = 0;//指向起点 byte[] tt = new byte[clob.Length]; clob.Read(tt, 0, (int)clob.Length);//将Clob读为二进制数据 MemoryStream ms = new MemoryStream(tt); BinaryFormatter bb = new BinaryFormatter(); object oo = bb.Deserialize(ms);//反序列化取出字符数据 }}对于clob应该是有版本要求的,首先确认一下你的oracle版本可以使用clob 你这个数据取出来以后要传到哪里,前台程序,还是在存储过程中处理;前台程序,你就按 string 对待就可以了,存储过程要使用dbms_lob 包处理; 求SQL查询代码纠正 打印楊輝三角問題 求一个存储过程 求一条PL/SQL语句 请教Oracle9i大表合并的问题 用这种方法改变数据库的临时表空间的大小,是否会破坏数据库的数据呢? 一个关于group by的问题 关于监听器,各位朋友请进.... 请问如何在SCO UNIX5.07下安装ORACLE9i?(100分) 关于索引组织表(IOT),请大家帮我看一下! 如何将一个字段里的值拆分为多个值显示出来 安装ORACLE CELINE 10g 总是停止在52%,无法完成安装
conn.Open();
OracleTransaction tran = conn.BeginTransaction();
string id = string.Empty;
OracleCommand command = null;
try
{
command = new OracleCommand();
command.Connection = conn;
double scale = 0;
if (ct.Scale.IndexOf(":") == -1)
{
scale = BasicOperate.GetDouble(ct.Scale, true);
}
else
{
scale = BasicOperate.GetDouble(ct.Scale.Substring(ct.Scale.IndexOf(":") + 1), true);
}//在插入时先存一个空的empty_clob()[empty_blob()]
command.CommandText = string.Format(@"insert into chart(chartname,charttype,source,scale,producttime,"
+"xml_definition) values('{0}','{1}','{2}',{3},'{4}',empty_clob()) "
+"returning chartid into :rid",
ct.ChartName, ct.ChartType, ct.Source, scale, ct.ProductTime, ct.xmlDefinition);
command.Parameters.Add("rid", OracleDbType.Varchar2, 32).Direction = ParameterDirection.Output;
command.ExecuteNonQuery();
id = command.Parameters["rid"].Value.ToString();//读入clob字段进行编辑
command.CommandText = string.Format("select xml_definition from chart where chartid='{0}' for update", id);
using (OracleDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
OracleClob clob = reader.GetOracleClob(0);//读入二进制对性
clob.Erase();//清空其中的数据
clob.Position = 0;
clob.BeginChunkWrite();//开始写入
int buffersize = 100;
int retval = 0;
byte[] bts = new byte[buffersize];//将字符串序列化为二进制流
MemoryStream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, ct.xmlDefinition);//将二进制流写入Clob字符中
stream.Seek(0, SeekOrigin.Begin);
retval = stream.Read(bts, 0, buffersize);
while (retval == buffersize)
{
clob.Write(bts, 0, buffersize);
retval = stream.Read(bts, 0, buffersize);
}
clob.Write(bts, 0, 100);
clob.EndChunkWrite();//结束写入
clob.Flush();//刷新
clob.Close();//关闭
}
reader.Close();
}
tran.Commit();
}
catch (Exception ex)
{
tran.Rollback();
//throw new Exception(ex.Message);
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}读取Clob(blob)字段: using (OracleDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
OracleClob clob = reader.GetOracleClob(0);//读取二进制字段
clob.Position = 0;//指向起点
byte[] tt = new byte[clob.Length];
clob.Read(tt, 0, (int)clob.Length);//将Clob读为二进制数据
MemoryStream ms = new MemoryStream(tt);
BinaryFormatter bb = new BinaryFormatter();
object oo = bb.Deserialize(ms);//反序列化取出字符数据 }}对于clob应该是有版本要求的,首先确认一下你的oracle版本可以使用clob