oracle--clob

摘要:
示例代码:DECLAREloblocCLOB;bufferVARCHAR2;amountNUMBER:=20;offsetNUMBER:=1;BEGIN--初始化要写入的数据buffer:='Thisisawritingexample';amount:=length;SELECTdocumentINTOlobloc--获取定位器并锁定行FROMview_sites_infoWHEREsite_id=100FORUPDATE;dbms_lob.write;COMMIT;END;DBMS_LOB.readPROCEDUREREAD;PROCEDUREREAD;各参数的含义为:lob_loc:要读取的LOB定位器。示例代码:DECLAREloblocCLOB;bufferVARCHAR2;amountNUMBER:=2;offsetNUMBER:=6;BEGINSELECTdocumentINTOlobloc--获取定位器FROMlob_storeWHERElob_id=100;dbms_lob.read;--读取数据到缓冲区dbms_output.put_line;--显示缓冲区中的数据COMMIT;END;DBMS_LOB.appendPROCEDUREappend;PROCEDUREappend;各个参数的含义如下:dest_lob是被源lob添加到的目标lob的定位器。src_lob是源lob的定位器。any_cs用来指定字符集。

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

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(2000);
  amount NUMBER := 20;
  offset NUMBER := 1;
BEGIN
  --初始化要写入的数据   
  buffer := 'This is a writing example';
  amount :=length(buffer);
  SELECT document
    INTO lobloc --获取定位器并锁定行   
    FROM view_sites_info
   WHERE site_id = 100FOR UPDATE;
  dbms_lob.write(lobloc,
                 amount,
                 1,
                 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(2000);
  amount NUMBER := 2;
  offset NUMBER := 6;
BEGIN
  SELECT document
    INTO lobloc --获取定位器   
    FROM lob_store
   WHERE lob_id = 100;
  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 inblob, 
  amount in integer := 32767,
  offset in integer := 1)
returnraw;

dbms_lob.substr(
  lob_loc in clob character setany_cs, 
  amount in integer := 32767,
  offset in integer := 1)
return varchar2 character set lob_loc%charset;

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

参考文章:

1.ORACLE 操作 CLOB 字段

免责声明:文章转载自《oracle--clob》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇一文看懂 MySQL 分区和分表,提高表增删改查效率AQS与重入锁ReetrantLock原理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Notification(Notification的通知栏常驻、Notification的各种样式、Notification点击无效)

所以Notification的使用,也在开发当中,使用的越来越频繁。今天我就来跟大家分享一下Notification的常用事项。最新的Notification的用法,是推荐使用V4包下的NotificationCompat.Builder,利用它,进行各种设置,具体的用法先别着急,我们慢慢道来。//Notification.DEFAULT_SOUND:系统默...

Java switch 枚举

Switch可以使用int.short、char、Enum和String其中,Enum是1.5之后的新特性,String是java8的新特性。所以正确的写作应该如下。...

docker run hangs问题排查记录

1.故障描述过去两天遇到了一个非常奇怪的问题。现在完整的故障描述如下:1)首先,我的同事告诉我,K8S集群中的一个工作节点将其状态更改为NoReady,并且在节点kubelet_truntime的错误日志中发现了大量此类日志E060301:50:51.45511776268remote。go:332]ExecSync1f0e3ac13faf224129bc4...

js Base64与字符串互转

1、base64加密在页面中引入base64.js文件,调用方法为:˂!...

mac下vscode插件位置

1、 位置:Mac:User/(您的用户名)/vscode/extensions II下vscode插件的存储位置。搜索步骤:以我的mac为例,打开查找器,单击远程CD,单击转到上面的文件夹,单击macintosh HD,单击用户(或用户),单击mymac,单击。vscode(.vscode是一个隐藏文件。如果默认情况下不显示,请按住ctrl+shift+....

ORACLE无法删除当前连接用户

今天在做Oracle数据库是遇到ORACLE无法删除当前连接用户,经查找可用如下方法解决。SQL˃dropuseracascade;//删除用户以及用户表空间下所有对象用户已丢弃。...