Oracle 插入超4000字节的CLOB字段的处理方法

最近在做系统开发的时候需要想Oracle数据库插入超过4000字节的CLOB字段,在网上查询了N久才发现下面的解决方案,故留存以备后查。

我们可以通过创建单独的OracleCommand来进行指定的插入,即可获得成功,这里仅介绍插入clob类型的数据,blob与此类似,这里就不介绍了,下面介绍两种办法

在通过拼组sql语句来实现数据插入的应用中,我们很有可能会遇到需要插入大型数据的情况,例如,在oracle中需要插入字节数超过4000的字段内容时,我们如果通过简单的拼组sql语句来实现插入,显然就会出现问题,而在sql server中却没有这个限制,个人尝试了26w个字符的sql语句在sql server2005中执行,依旧可以插入数据,但是在oracle中插入超过4000个字符的内容则会报异常。

下面就此问题的解决办法,做一下小结: 
我们可以通过创建单独的OracleCommand来进行指定的插入,即可获得成功,这里仅介绍插入clob类型的数据,blob与此类似,这里就不介绍了,下面介绍两种办法,均已验证: 
第一种方法:使用组件System.Data.OracleClient的方法来实现,比较简单一些:

复制代码代码如下:

string conn = "Data Source=客户端指定连接字符串;User ID=user;Password=mima"; 
OracleConnection Con = new System.Data.OracleClient.OracleConnection(conn); 
Con.Open(); 
string cmdText = "INSERT INTO GWEXPOINTLIST(id, name, content) VALUES(1, ‘name‘, :clob)"; 
OracleCommand cmd = new OracleCommand(cmdText, Con); 
OracleParameter op = new OracleParameter("clob", OracleType.Clob); 
op.Value = "超过4000字符的超常字符串"; 
cmd.Parameters.Add(op); 
cmd.ExecuteNonQuery(); 
Con.Close();

第二种方法:使用组件Oracle.DataAccess的方法实现,可能用法稍微老了一些,但依然有效:

复制代码代码如下:

IDbCommand m_objCmd = new OracleCommand(); 
m_objCmd.CommandText = "INSERT INTO GWEXPOINTLIST(id, name, content) VALUES(1, ‘name‘, :clob)"; 
IDataParameterCollection m_arrParamter = m_objCmd.Parameters; 
OracleClob clob = new OracleClob((OracleConnection)m_objConn); 
OracleParameter objParam = new OracleParameter(‘clob‘, OracleDbType.Clob, clob, ParameterDirection.Input);

objParam.Value = "超过4000字符的超常字符串"; 
m_arrParamter.Insert(0, objParam);

int nRet = m_objCmd.ExecuteNonQuery();

当然,sql server同样也可以通过这样的方法来进行添加字符串,但是添加二进制文件的话,就只能用这种方式来添加了,因为需要读取文件的二进制流内容。

Oracle 插入超4000字节的CLOB字段的处理方法

时间: 2024-11-05 13:35:23

Oracle 插入超4000字节的CLOB字段的处理方法的相关文章

探究oracle clob字段是如何存储的

clob字段存储的是文本,如果存储少于4000个字节则clob字段会和记录存放在一起,如果存储超过4000个字节,则不会与记录存放在一起.值得注意的是,这里的4000个字节并不是等同于varchar2(4000),那相当于什么呢,请看下列实验,数据库版本是10.2.0.1.0: drop table test_clob purge; create table test_clob ( id number, clob1  clob ); insert into test_clob values(1,

解决比较Oracle中CLOB字段问题

解决比较Oracle中CLOB字段问题 Oracle中CLOB和BLOB字段虽说在开发中满足了存放超大内容的要求,但是在一些简单使用中确频频带来麻烦.CLOB中存放的是指针,并不能直接取到实际值.而SQLServer中的text字段就很方便,可以直接拿来与需要的字符串比对,象什么等于呀小于呀Like呀不在话下.可是换成Oracle就麻烦死了,要开辟一个缓存,把内容一段段读取出来后转换,难道写个where条件都这么复杂?经过多方寻求资料,终于发现一个方便简单的方法:利用dbms_lob 包中的方法

【Oracle】【35】BLOB字段和CLOB字段

前言: BLOB用来存储大量二进制数据.如图片.音乐等,转为二进制数再存储 CLOB用来存储大量文本数据.如HTML页面等,varchar2最大是4000,预计会超过4000的用Clob 正文: 1,我用的是java + mybatis,直接用String处理就可以了.String最大能存4G 数据库:创建表 -- Create table create table CLOB_TEST ( id VARCHAR2(32) default sys_guid(), content CLOB ) 实体

Java 存储和读取 oracle CLOB 类型字段的实用方法

package oracle.clob; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.sql.Connection; import java.sql.DriverManager; import java

【Oracle】给clob字段插入数据

// 插入 //OracleCommand cmd = "insertInto into GIS_PolygonPoint(PCode,PointColl) values('140134', :var)"; // 修改 //OracleCommand cmd = new OracleCommand("update yd_line set coord=:coordstr where lineid=" + LineId.ToString(), conn); string

好记性不如烂笔头18-java对Oracle的CLOB字段的操作

分布式文件系统的发展很快,在Oracle中,LOB(Large Object,大型对象)类型的字段现在虽然用的没有以前那么多了.但是在一些特殊的场合,需要用它保存一些数据量非常大的业务领域(如图象.档案等),还是有不少的市场. LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对象(BinaryLarge Object),适用于存贮非文本的字节流数据(如程序.图象.影音等).而CLOB,即字符型大型对象(Character Large Object),则与字符集相关,适于存贮文本型的数据

解决Druid设置Oracle的Clob字段时的小坑

众所周知,Oracle有很多坑, 所以才有了去IOE. 在使用Druid做数据库连接池后,其实偶尔也会碰到小坑,这就是使用开源项目所必须去填平的.[如果使用不开源的产品,那就不是坑,而是陷阱了,你都不知道怎么去填坑] 用Druid连接池,通过JDBC往Oracle数据库的Clob字段插入数据,或者更新数据时,一个问题出现了. 类似于这样: Caused by: java.lang.ClassCastException: com.alibaba.druid.proxy.jdbc.ClobProxy

oracle 插入 clob字段的问题 及 python读取clob字段

1.用insert语句,插入clob字段,如果插入内容超过4000,会提示字符串过长,处理的方法是,先声明插入的字段为clob类型,如下:insertSql = "DECLARE email_text clob := '%s'; begin insert into emails values ('%r','%s',email_text,'重点股票跟踪(%s)','0',''); end;" % (email_text,id, contactEamilAddress, dateInput

Oracle导出包含clob字段的sql脚本工具

之前工作中遇到生产环境不允许导入Oracle的dmp文件,只能导入sql脚本,但是表中存在clob字段,直接用plsql工具无法导出clob字段,用了下dbvisualizer可以直接导出,亲测可用. dbvisualizer是一款十分好用的数据库工具,支持数据库AmazonRedShift.DB2LUW.Exasol.H2.Informix.JavaDB/Derby.Microsoft SQL Server.MIMERSQL.MySQL.Netezza.NuoDB.Oracle.Postgre