zoukankan      html  css  js  c++  java
  • Orcal数据类型总结

    一、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

  • 相关阅读:
    助教学期总结
    助教学习总结
    第十二周助教总结
    第十一周助教总结
    第十周助教总结
    第九周助教总结
    第八周助教总结
    第八周作业——基础
    19秋第三周助教总结
    助教学习总结
  • 原文地址:https://www.cnblogs.com/luzhanshi/p/11381302.html
Copyright © 2011-2022 走看看