问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

oracle中Blob和Clob类型的区别与用法

发布网友 发布时间:2022-04-07 22:39

我来回答

2个回答

懂视网 时间:2022-04-08 03:00

    最近利用NHibernate映射类型为Clob字段在插入数据时发现当字符的字节数(一个半角字符一个字节,一个全角字符两个字节)在2000-4000之间时报错(ORA-01461:仅可以插入LONG列的LONG值赋值)。经过不断查找资料和自己的试验该问题终于得到解决,下边我将自己的心得给大家做一个分享。
 

 

准备

系统环境 xp+.net2.0+oracle9i
 
表结构(由于是测试,表结构随便建了一张) XX

 

 字段名  类型
 ID  VARCHAR2(70)
 TEST  CLOB

 

 测试

 方式1:直接将CLOB的值拼写在SQL语句中。

代码:

string id = Guid.NewGuid().ToString();
OracleCommand cmd = Conn.CreateCommand();
cmd.CommandText = "insert into xx(id,test) values(‘" + id + "‘,‘" + data + "‘)";// data是一个变量,存储你要插入的字符串
cmd.ExecuteNonQuery();

情况分析:

     当data的长度大于4000时报错(ORA-01704:文字字符串过长),小于或等于4000时正常插入。

原因分析:

   之所以会出现长度大于4000时报错,是因为Oracle中有SQL语句中两个单引号之间的字符数不能大于4000的限制。‘" + data + "‘ data在sql语句之间,当data的值大于4000个字节时就会报错。

解决办法:

   这种方式比较棘手,但有更好的方式,下边会讲到 。

 

方式2:采用参数形式。

代码:
string id = Guid.NewGuid().ToString();
OracleCommand cmd = Conn.CreateCommand();
cmd.CommandText = "insert into xx(id,test) values(‘" + id + "‘,:p1)";
OracleParameter p1 = new OracleParameter("p1", OracleType.Clob);
p1.Value = data; // data是一个变量,存储你要插入的字符串
cmd.Parameters.Add(p1);
cmd.ExecuteNonQuery();

情况分析:

    采用这种方式能够正常插入。所以推荐用这种方式。

原因分析:

  无

解决办法:

   无

方式3:采用参数形式,但是参数类型写为OracleType. NVarChar

代码:

string id = Guid.NewGuid().ToString();
OracleCommand cmd = Conn.CreateCommand();
cmd.CommandText = "insert into xx(id,test) values(‘" + id + "‘,:p1)";
OracleParameter p1 = new OracleParameter("p1", OracleType. NVarChar);
p1.Value = data; // data是一个变量,存储你要插入的字符串 
cmd.Parameters.Add(p1);
cmd.ExecuteNonQuery();

情况分析:

    为什么要写这种方式,因为这种方式和采用NHibernate的方式很相似,先看看在这种方式会产生什么情况。当data的字节数在0-2000之间时正常插入,大于4000时也正常插入,但在2000-4000时则失败,报错(ORA-01461:仅可以插入LONG列的LONG值赋值)

原因分析:

   没有采用对应的Oracle类型。

解决办法:

   采用OracleType.Clob

 

 

Oracle中Clob类型处理解析

标签:

热心网友 时间:2022-04-08 00:08

BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的。其实两个是可以互换的的,或者可以直接用LOB字段代替这两个。但是为了更好的管理ORACLE数据库,通常像图片、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。而像文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新存储等操作都提供很大的方便。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...总是被情所困?要怎么样才能控制自己,对他不要那么在呼? 关于@synchronized,你所不知道的事情 怎么样才算得上熟悉多线程编程? 大学期间,有必要考驾照吗 酸奶怎么做奶酪 酸奶:奶酪 一个女人的在保安室用掐带把男保安勒死了这是什么电影 开场就是一个老头被钢绳给勒死,那是啥电影 鱼城镇下辖村 顾楼村位于哪个市 “王”字旁再一个“冒”是什么字? 去哪里学习卤牛肉技术 正宗猪大肠做法培训 北京割双眼皮花多少钱? 北京医院割双眼皮多少钱? 冒的部首,结构,音序,音节,笔画 行家们 求教,江苏卤牛肉培训学校,卤牛肉怎么做好吃 北京双眼皮需要多少钱? 骨,冒,迈这三个字的音节,音序,部首,再查几画 北京现在割双眼皮要多少钱? 冒字什么意思 温州卤菜培训,培训卤菜的做法,如何做卤牛肉 北京双眼皮切割多少钱? 竹林顿的卤牛肉培训,要多少钱,好学吗? 北京双眼皮手术一般要多少钱? 北京做双眼皮手术价格大概是多少? 北京做双眼皮要多少钱? 我想学卤牛肉技术 什么地方可以学五香卤牛肉 北京割双眼皮大概要多少钱? 冒字的偏旁是什么啊? 冒字的部首是什么偏旁 北京割双眼皮多少钱啊? 冒字偏旁部首音序 冒字上面的部首怎么念 <冒>这个字上面的部首是什么字? 如何选择卤牛肉加盟商 询问烹饪川卤牛肉的过程是? 怎样减掉大小腿的死肌肉 母爱的作文三百字多 到哪可以学做凉菜? 卤牛肉30种香料多吗?? 小腿死肌肉太多怎么办 无尽的母爱300字作文 大腿死肌肉如何恢复弹性或者减掉? 关于母爱的作文三百字 怎样消除腿上的肌肉 关于母爱的文章300字,要生活的感悟 怎么减大腿上的死肌肉(肌肉块) 怎么减掉腿上肌肉? 如何减掉小腿死肌肉, 急!请问怎么减掉小腿上的肌肉?