博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle LOB类型
阅读量:5106 次
发布时间:2019-06-13

本文共 1875 字,大约阅读时间需要 6 分钟。

Oracle预定义了4种大对象类型,它们是BEILE、BLOB、CLOB、NCLOB。

BFILE:我们可以把大的二进制对象存储在数据之外,BFILE存放在数据库中,存放的是文件指针(file locator),该指针指向数据之外的操作系统文件,数据实际存放在操作系统中,bfile是只读的,不能修改,不参与数据库的事务。

BLOB用于存储非结构化的二进制数据,最长可达128TB,数据存储在数据库中。
CLOB存放数据库字符集(database character set data)格式的字符数据,最大长度可达128TB,数据存储在数据库中。clob数据类型通过LOB定位器存储在表列中,实际的CLOB数据存储在独立的表空间中。
NCLOB功能和CLOB一样,只是NCLOB用于存放统一编码国家字符集(Unicode National Character Set)数据。

LOB 定位器(LOB Locators)就是指向LOB数据的指针。
处理LOB数据的方法有很多种,通常通过DBMS_LOB包来检索或操作LOB数据。
open() 打开LOB,close() 关闭LOB,append() 将源LOB中的内容追加到目标LOB,copy()从源LOB中的一部分或者全部数据复制到目标LOB,erase()删除LOB中全部或部分内容,trim() 将LOB值减少到指定的长度,read()从LOB中读取数据,write()写入数据, compare ()比较两个同种数据类型的LOB的部分或全部值是否相同,getlength() 获取LOB的长度,fileopen()打开文件,fileclose()关闭文件,fileexits()检查文件的存在性。

一个例子:

--建立学生论文表:

create table  student_paper (

student_name   varchar2(20),
paper CLOB
);

insert into student_paper (student_name,paper)

values ('王晶',EMPTY_CLOB( ) );
commit;

-- EMPTY_CLOB()是oracle内置的函数,创建一个空的LOB定位器

---PL/SQL块:实现的功能是,向lob定位器中写入数据missunderstand。

DECLARE

    v_clob CLOB;
BEGIN
    select  paper
        into v_clob
        from student_paper
        where student_name ='王晶'
        for update;
    dbms_lob.OPEN(v_clob,dbms_lob.lob_readwrite);
    dbms_lob.WRITE(v_clob,3,1,'mis');
    dbms_lob.WRITEAPPEND(v_clob,20,'understandfssddseshhhhh');—wirteappend() 在后面附加写入数据
    dbms_lob.CLOSE(v_clob);
    COMMIT;
    EXCEPTION
    when others then
    dbms_output.put_line('FAILED');
    ROLLBACK;
END;

--读取LOB数据

DECLARE

         vclob2 CLOB;
        v_out  varchar2(1000);
        V_read_length NUMBER;
BEGIN
        select paper
            into vclob2
            from student_paper
            where student_name ='王晶';
        V_read_length :=13;   
        DBMS_LOB.READ(vclob2,V_read_length,1,v_out);
        DBMS_OUTPUT.PUT_LINE(v_out);
        DBMS_OUTPUT.PUT_LINE(length(v_out));
        DBMS_OUTPUT.PUT_LINE('HI,I am  PL/SQL');
END;
-- 函数解释:
procedure read( 要读取的定位器, 要读取的字节数, 开始读取操作的偏移量, 存储读操作结果的缓冲区);
procedure  write(要写入的lob定位器,写入lob中的字节数,指定开始操作的偏移量,指定写操作的缓冲区)

转载于:https://www.cnblogs.com/happinessqi/p/3349661.html

你可能感兴趣的文章