一、Oracle中的varchar2类型
-
我们在Oracle数据库存储的字符数据一般是用VARCHAR2。VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Database中的字段类型,不同场景的最大长度不同。
-
在Oracle Database中,VARCHAR2 字段类型,最大值为4000;PL/SQL中 VARCHAR2 变量类型,最大字节长度为32767。
-
当 VARCHAR2 容纳不下我们需要存储的信息时,就出来的Oracle的大数据类型LOB( Large Object,大型对象)。
二、Oarcle中的LOB类型
-
在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了。因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活,适用于数据量非常大的业务领域(如图象、档案等)。
-
LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对象(Binary Large Object),适用于存贮非文本的字节流数据(如程序、图象、影音等)。
-
而CLOB,即字符型大型对象(Character Large Object),则与字符集相关,适于存贮文本型的数据(如历史档案、大部头著作等)。
三、DB中使用CLOB类型字段
(一)、创建表(使用sql或者直接在PL/SQL客户端创建),字段类型CLOB
-- Create table create table TEST_CLOB ( id number, nmae varchar2(10), msg clob )
先看一下使用普通方式操作CLOB类型:
INSERT INTO TEST_CLOB (ID, NMAE, MSG) VALUES(1,'111','我是大量信息描述')
select t.*from TEST_CLOB t
查询因为不是varchar2类型,所以普通查询看不到CLOB类型的字段内容,结果如下
而上面普通插入操作也会因为Oracle的隐式转换,默认把字符串转换成varchar2类型,一旦字符串内容超过varchar2的最大限度就会报会报ora-01704(字符串太长)错误。
正确操作:
--使用PL/SQL语法,采取绑定变量的方式解决,而不是直接拼接SQL DECLARE V_LANG CLOB := '待插入的海量字符串'; V_UPDATE CLOB := '更新的海量字符串'; BEGIN INSERT INTO TEST_CLOB t VALUES ('Grand.Jon', 22, V_LANG); --增加 UPDATE TEST_CLOBt SET t.temp_clob = V_UPDATE WHERE rownum = 1; --修改 SELECT t.NAME, dbms_lob.substr(t.MSG) FROM TEST_CLOB t; --查询 将CLOB转成字符类型 DELETE TEST_CLOB t WHERE rownum = 1; --按列删除 COMMIT; END; /
对CLOB的操作我们在存储过程中基本上使用 dbms_lob 中 substr , append , write 等方法。
dbms_lob 方法总结
1 dbms_lob.createtemporary(V_SQL,true); --创建一个临时clob,用来存储拼接的sql 2 dbms_lob.write(v_SQL,'写入信息'); --写入操作 3 dbms_lob.append(v_SQL,','); --拼接clob 4 dbms_lob.substr(v_SQL); --截取clob,不传参数就是全部读取 5 dbms_lob.freetemporary(v_SQL); --释放clob
关于CLOB类型更多详细使用讲解参考:https://www.cnblogs.com/Grand-Jon/p/7389427.html