Oracle LOB字段操作的一点教训
今天有个功能需要对CLOB字段进行操作,期间遇到几个问题,老天眷顾,都算是解决了,记一下,免得日后重蹈覆辙。
错误一:
ORA-22920: 未锁定含有 LOB 值的行
出现这个问题的原因,是由于select出LOB字段时未加 for update,ORACLE官方文档对该错误的说明:
引用文字代码
ORA-22920 row containing the LOB value is not locked
Cause: The row containing the LOB value must be locked before updating the LOB value.
Action: Lock the row containing the LOB value before updating the LOB value.
ORA-22920 row containing the LOB value is not locked
Cause: The row containing the LOB value must be locked before updating the LOB value.
Action: Lock the row containing the LOB value before updating the LOB value.
于是加上for update再测,发现错误提示变了,变成下面的:
错误二:
ORA-01002: 读取违反顺序
出现这个问题的原因是Connection 的 autoCommit属性值为true,改成
Sql代码 conn.setAutoCommit(false);
......
LOB操作
.....
conn.commit();
conn.setAutoCommit(true);
conn.setAutoCommit(false);
......
LOB操作
.....
conn.commit();
conn.setAutoCommit(true);
就可以了。
另外,注意第一步的select时,不要select出非LOB的字段,并且,如果一张表有多个LOB字段,操作顺序也最好按照表里的字段顺序来操作,否则也可能出错。
相关文档:
当你在数据库中创建数据表的时候,你需要定义表中所有字段的类型。ORACLE有许多种数据类型以满足你的需要。数据类型大约分为:character, number, date, LOB, 和RAW等类型。虽然ORACLE8i也允许你自定义数据类型,但是它们是最基本的数据类型。
在下面的文章中你将了解到他们在oracle 中的用法、限制以及允许值。
......
SQL> select * from emp where sal=800;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- ----- ......
1、pfile 文本文件 client端参数文件;不能动态修改,可以用普通的编辑器修改,修改之后需要重启。pfile可能会导致服务器启动不一致,因为可以在客户端启动。 2、spfile 二进制文件服务器端参数文件,有了spfile,oracle可以实现动态参数在线修改,部分参数修改之后无需重启。但是,因为是二进制文件,所以不能用普通的编辑 ......
一、系统的默认用户
Java代码
sys;//系统管理员,拥有最高权限
system;//本地管理员,次高权限
scott;//普通用户,密码默认为tiger,默认未解锁
二、登陆
Java代码
sqlplus conn / as sysdba;//登陆sys帐户 ......
一、定位
oracle分两大块,一块是开发,一块是管理。开发主要是写写存储过程、触发器什么的,还有就是用Oracle的Develop工具做form。有点类似于程序员,需要有较强的逻辑思维和创造能力,个人觉得会比较辛苦,是青春饭J;管理则需要对oracle数据库的原理有深刻的认识,有全局操纵的能力和紧密的思维,责任较大,因为一 ......