Orcal数据类型总结

瘦欲@ 提交于 2019-11-27 23:57:45

一、Oracle中的varchar2类型

  1. 我们在Oracle数据库存储的字符数据一般是用VARCHAR2。VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Database中的字段类型,不同场景的最大长度不同。

  2. 在Oracle Database中,VARCHAR2 字段类型,最大值为4000;PL/SQL中 VARCHAR2 变量类型,最大字节长度为32767。

  3. 当 VARCHAR2 容纳不下我们需要存储的信息时,就出来的Oracle的大数据类型LOB( Large Object,大型对象)。


 

二、Oarcle中的LOB类型

  1. 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了。因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活,适用于数据量非常大的业务领域(如图象、档案等)。

  2. LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对象(Binary Large Object),适用于存贮非文本的字节流数据(如程序、图象、影音等)。

  3. 而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

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!