最近,收到这样的异常邮件:

Error updating database.  Cause: java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column

查了下,应该是数据库varchar2(4000)写入的数据超过4000字节导致的,换成clob吧。

mybatis  中相应修改

mapper.xml文件中

</resultMap>
<result column="MSG_CONTENT" property="msgContent" jdbcType="CLOB" />

</resultMap>

insert操作中

#{msgContent,jdbcType=CLOB}

顺便把一些大对象的操作也看了下,DBMS_LOB维护内部lob常用操作如下

  • DBMS_LOB.write
PROCEDURE WRITE(lob_loc IN OUT BLOB,
amount IN BINARY_INTEGER,
offset IN INTEGER,
buffer IN RAW);
PROCEDURE WRITE(lob_loc IN OUT CLOB CHARACTER SET any_cs,
amount IN BINARY_INTEGER,
offset IN INTEGER,
buffer IN VARCHAR2 CHARACTER SET lob_loc%charset);

各参数的含义为:

lob_loc:要写入的LOB定位器。

amount:写入LOB中的字节数。

offset:指定开始操作的偏移量。

buffer:指定写操作的缓冲区。

示例代码:

DECLARE
lobloc CLOB;
buffer VARCHAR2();
amount NUMBER := ;
offset NUMBER := ;
BEGIN
--初始化要写入的数据
buffer := 'This is a writing example';
amount := length(buffer);
SELECT document
INTO lobloc -- 获取定位器并锁定行
FROM view_sites_info
WHERE site_id =
FOR UPDATE;
dbms_lob.write(lobloc,
amount,
,
buffer);
COMMIT;
END;
  • DBMS_LOB.read
PROCEDURE READ(lob_loc IN BLOB,
amount IN OUT BINARY_INTEGER,
offset IN INTEGER,
buffer OUT RAW);
PROCEDURE READ(lob_loc IN CLOB CHARACTER SET any_cs,
amount IN OUT BINARY_INTEGER,
offset IN INTEGER,
buffer OUT VARCHAR2 CHARACTER SET lob_loc%charset);

各参数的含义为:

lob_loc:要读取的LOB定位器。

amount:要读取的字节数。

offset:开始读取操作的偏移量。

buffer:存储读操作结果的缓冲区。

示例代码:

DECLARE
lobloc CLOB;
buffer VARCHAR2();
amount NUMBER := ;
offset NUMBER := ;
BEGIN
SELECT document
INTO lobloc --获取定位器
FROM lob_store
WHERE lob_id = ;
dbms_lob.read(lobloc,
amount,
offset,
buffer); --读取数据到缓冲区
dbms_output.put_line(buffer); --显示缓冲区中的数据
COMMIT;
END;
  • DBMS_LOB.append
PROCEDURE append(dest_lob IN OUT NOCOPY BLOB,
src_lob IN BLOB);
PROCEDURE append(dest_lob IN OUT NOCOPY CLOB CHARACTER SET any_cs,
src_lob IN CLOB CHARACTER SET dest_lob%charset);

各个参数的含义如下:

dest_lob是被源lob添加到的目标lob的定位器。

src_lob是源lob的定位器。

any_cs用来指定字符集。

  • DBMS_LOB.substr
dbms_lob.substr(
lob_loc in blob,
amount in integer := ,
offset in integer := )
return raw; dbms_lob.substr(
lob_loc in clob character set any_cs,
amount in integer := ,
offset in integer := )
return varchar2 character set lob_loc%charset;

各个参数的含义如下:
lob_loc是substr函数要操作的大型对象定位器
amount是要从大型对象中抽取的字节数
offset是指从大型对象的什么位置开始抽取数据

参考文章:

1. ORACLE 操作 CLOB 字段

最新文章

  1. select2 清空数据
  2. zoj 3882 博弈 *
  3. hdu 5747 Aaronson
  4. 不可错过的手机APP常见8种界面导航样式
  5. [置顶] 九度笔记之 1434:今年暑假不AC
  6. ASP.NET MVC+Entity Framework 4.1访问数据库
  7. vs 中一些快捷键
  8. php流程管理
  9. 响应式web-媒体查询
  10. Qwt安装(转)
  11. 麻瓜之我要学sql,啦啦啦啦
  12. linux 将自己的服务添加到系统service服务
  13. 一、Jmeter环境介绍
  14. spring配置Bean
  15. Python之并发编程-协程
  16. c# IE浏览器清除缓存没用
  17. shell unittest工具
  18. 一款基于jQuery外观优雅带遮罩弹出层对话框
  19. Swift-函数的理解
  20. CBV流程

热门文章

  1. 07 java main方法
  2. Red5边源服务器集群部署
  3. POJ 2421 Constructing Roads (最小生成树)
  4. 什么是USBMini接口
  5. hdu 5363 Key Set
  6. poj 2349 Arctic Network
  7. 去掉 CONSOLE 窗口(转)
  8. POJ 2186 Popular Cows(强连通分量缩点)
  9. C语言单向循环链表解决约瑟夫问题
  10. SQL Server中如何获取当前年,月,日,时,分,秒