• clob 类型


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

    • 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了。因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活,适用于数据量非常大的业务领域(如图象、档案等)。
    • LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对象(Binary Large Object),适用于存贮非文本的字节流数据(如程序、图象、影音等)。
    • 而CLOB,即字符型大型对象(Character Large Object),则与字符集相关,适于存贮文本型的数据(如历史档案、大部头著作等)。

    Oracle中的LOB数据类型分类

    •     CLOB:存储大量 单字节 字符数据
    •     NLOB:存储定宽 多字节 字符数据。
    •     BLOB:存储较大无结构的二进制数据。
    •     BFILE:将二进制文件存储在数据库外部的操作系统文件中。存放文件路径。

    大对象列时,插入空白构造函数。

    •     字符型:empty_clob(),empty_nclob()
    •     二进制型:empty_blob()

    读取大对象数据的过程和函数

      建表语句:

    create table TEMP
    (
      name      VARCHAR2(200),
      age       NUMBER,
      temp_clob CLOB
    )

     DBMS_LOB包:包含处理大对象的过程和函数

    1. DBMS_LOB.Read():从LOB数据中读取指定长度数据到缓冲区的过程。

       语法: DBMS_LOB.Read(LOB数据,指定长度,起始位置,存储返回LOB类型值变量);

    DECLARE
      l_clob  CLOB;
      vrstr   VARCHAR2(1000);
      lenght  NUMBER(4);
      stat    NUMBER(4);
    BEGIN
      SELECT t.temp_clob 
        INTO l_clob 
        FROM temp t
        WHERE ROWNUM = 1;
      lenght   := dbms_lob.getlength(l_clob);
      stat := 1;
      dbms_lob.read(l_clob, lenght, stat, vrstr);
      dbms_output.put_line('返回值为: ' || vrstr);
    END;

    运行结果:  返回值为: 加入博客园的第一天

    2. DBMS_LOB.SubStr():从LOB数据中提取子字符串的函数。
        语法: DBMS_LOB.SubStr(LOB数据,指定提取长度,提取起始位置)

    DECLARE
      l_clob  CLOB;
      vrstr    VARCHAR2(1000);
      lenght    NUMBER(4);
      stat  NUMBER(4);
    BEGIN
      SELECT t.temp_clob 
        INTO l_clob 
        FROM temp t
        WHERE ROWNUM = 1;
      lenght   := dbms_lob.getlength(l_clob);
      stat := 1;
      vrstr := dbms_lob.substr(l_clob, 4, stat);
      dbms_output.put_line('返回值为: ' || vrstr);
    END;

    运行结果:  返回值为: 加入博客

     3. DBMS_LOB.InStr():从LOB数据中查找子字符串位置的函数。
         语法: DBMS_LOB.InStr(LOB数据, 子字符串);

    DECLARE
      l_clob  CLOB;
      vrstr    VARCHAR2(1000);
      lenght    NUMBER(4);
      stat  NUMBER(4);
    BEGIN
      SELECT t.temp_clob 
        INTO l_clob 
        FROM temp t
        WHERE ROWNUM = 1;
      stat := 1;
      vrstr := dbms_lob.instr(l_clob, '博客');
      dbms_output.put_line('返回值为: ' || vrstr);
    END;

    运行结果:  返回值为: 3

    4. DBMS_LOB.GetLength():返回指定LOB数据的长度的函数。
        语法: DBMS_LOB.GetLength(LOB数据)

    操作大对象数据的过程   

    操作会改变数据库中原有数据,需要加上Updata锁锁上指定数据列,修改完后提交事务。
       
    1. DBMS_LOB.Write():将指定数量的数据写入LOB的过程。
       语法:  DBMS_LOB.Write(被写入LOB, 写入长度(指写入LOB数据),写入起始位置(指被写入LOB),写入LOB数据);

    DECLARE
      l_clob CLOB;
      vrstr  VARCHAR2(1000);
      lenght NUMBER(4);
      stat   NUMBER(4);
      l_value varchar2(1000);
    BEGIN
      l_value := 'CLOB';
      lenght  := LENGTH(l_value);
      
      SELECT t.temp_clob 
        INTO l_clob 
        FROM temp t 
        WHERE rownum = 1 
        FOR UPDATE;
      
      dbms_lob.write(l_clob,lenght,4, l_value);
      dbms_output.put_line('返回值为: ' || l_clob);
      COMMIT;
    END;

    运行结果:  返回值为: 加入博CLOB一天           被替换前的值为:  加入博客园的第一天

    2. DBMS_LOB.Append():将指定的LOB数据追加到指定的LOB数据后的过程。
        语法:  DBMS_LOB.Append(LOB数据,LOB数据);

    DECLARE
      l_clob CLOB;
      l_value varchar2(1000);
    BEGIN
      l_value := ',这是大对象列';
    
      SELECT t.temp_clob 
        INTO l_clob 
        FROM temp t 
        WHERE rownum = 1 
        FOR UPDATE;
      dbms_lob.append(l_clob,l_value);
      COMMIT;
      dbms_output.put_line('返回值为: ' || l_clob);
    END;

    运行结果为:  返回值为: 加入博CLOB一天,这是大对象列

  • 相关阅读:
    1040 最大公约数之和(欧拉函数)
    1028 大数乘法 V2(FFT or py)
    1020 逆序排列(DP)
    1837 砝码称重
    1070 Bash游戏 V4
    1280 前缀后缀集合(map)
    1390 游戏得分(贪心)
    1179 最大的最大公约数
    1400 序列分解(dfs)
    1420 数袋鼠好有趣(贪心二分)
  • 原文地址:https://www.cnblogs.com/ebsblog/p/10522182.html
Copyright © 2020-2023  润新知