oracle blob&clob类型的字段插入字符串

函数说明

官方文档

-- BLOB类型追加,amount为要追加的字节数,buffer类型为RAW
DBMS_LOB.WRITEAPPEND (
   lob_loc IN OUT NOCOPY BLOB, 
   amount  IN BINARY_INTEGER, 
   buffer  IN RAW
); 

-- CLOB类型追加,amount为要追加的字符数,buffer类型为VARCHAR2
DBMS_LOB.WRITEAPPEND (
   lob_loc IN OUT NOCOPY CLOB CHARACTER SET ANY_CS, 
   amount  IN BINARY_INTEGER, 
   buffer  IN VARCHAR2 CHARACTER SET lob_loc%CHARSET
);

建一个表,用来测试

CREATE TABLE "T_FIELDS" (	
	"ID" NUMBER NOT NULL ENABLE, 
	"F_BLOB" BLOB, 
	"F_CLOB" CLOB, 
	"F_NCLOB" NCLOB, 
	 PRIMARY KEY ("ID")
);

将字符串插入Blob字段


---------------------------------------------------------------------
-- 将字符串插入Blob字段
---------------------------------------------------------------------
DECLARE
	content BLOB; -- 或者使用下面这种写法:表名.字段名%TYPE
	-- content T_FIELDS.F_BLOB%TYPE; -- Blob类型
	buff VARCHAR2(4000);
-- 	amount BINARY_INTEGER:=0;			-- amount := amount + LENGTHB(buff);

BEGIN
  	-- 初始化blob
	dbms_lob.createtemporary(content, true);
	-- 拼出4000个字符(注意:1个中文=2个字符)
	FOR i IN 1..1000 LOOP
		buff := buff||'1234';
	END LOOP;
	
	-- 向blob中追加内容,LENGTHB()取的是字节数,不是字符数,UTL_RAW.CAST_TO_RAW()将字符串转换为RAW
	dbms_lob.writeAppend(content, LENGTHB(buff), UTL_RAW.CAST_TO_RAW(buff));
	
	-- 如果字符串过长,需分为多次放入blob中,否则会超出varchar2的长度限制
	buff := '第二段字符串....省略一万字....';
	-- 再次向blob中追加内容
	dbms_lob.writeAppend(content, LENGTHB(buff), UTL_RAW.CAST_TO_RAW(buff));

	INSERT INTO "T_FIELDS" ("ID", "F_BLOB") VALUES (1, content);
	commit;
END;


将字符串插入Clob字段


---------------------------------------------------------------------
-- 将字符串插入Clob字段
---------------------------------------------------------------------
DECLARE
	content CLOB; -- 或者使用下面这种写法:表名.字段名%TYPE
	-- content T_FIELDS.F_CLOB%TYPE; -- Clob类型
	buff VARCHAR2(4000);

BEGIN
  	-- 初始化clob
	dbms_lob.createtemporary(content, true);
	-- 拼出4000个字符(注意:1个中文=2个字符)
	FOR i IN 1..1000 LOOP
		buff := buff||'1234';
	END LOOP;
	
	-- 向clob中追加内容,LENGTH()取的是字符数,此处不用字节数
	dbms_lob.writeAppend(content, LENGTH(buff), buff);
	
	-- 如果字符串过长,需分为多次放入clob中,否则会超出varchar2的长度限制
	buff := '第二段字符串....省略一万字....';
	-- 再次向clob中追加内容
	dbms_lob.writeAppend(content, LENGTH(buff), buff);

	INSERT INTO "T_FIELDS" ("ID", "F_CLOB") VALUES (2, content);
	commit;
END;

其实Clob还有种简便写法
---------------------------------------------------------------------
-- 将字符串插入Clob字段 (简便写法)
---------------------------------------------------------------------
DECLARE 
	-- content CLOB; -- 或者使用下面这种写法:表名.字段名%TYPE
	content T_FIELDS.F_CLOB%TYPE; -- Clob类型
	buff1 VARCHAR2(4000);
	buff2 VARCHAR2(4000);
BEGIN
	-- 拼出4000个字符(注意:1个中文=2个字符)
	FOR i IN 1..1000 LOOP
		buff1 := buff1 ||'1234';
		buff2 := buff2 ||'0987';
	END LOOP;
	
	-- 例如:通过这种拼接的方式给Clob变量赋值
	-- content := '第一段内容'||'第二段内容';

	content := buff1 || buff2;
	INSERT INTO "T_FIELDS" ("ID", "F_CLOB") VALUES (3, content);
	commit;
END;




如果本文对你有帮助,还请点个赞喔!(●’◡’●)

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值