zoukankan      html  css  js  c++  java
  • dbms_lob使用之-基础

    
    在Oracle中,存储在LOB中数据称为LOB的值,如使用Select   对某一LOB字段进行选择,则返回的不是LOB的值,而是该LOB字段的定位器(可以理解为指向LOB值的指针)。如执行如下的SQL语句: 
      DELCARE   
      AUDIO_INFO   BLOB; 
      BENGIN   
      SELECT   audio   INTO   AUDIO_INFO   FROM   view_sites_info   
        WHERE   site_id=100;   
      END;   
      
      存储在AUDIO_INFO变量中的就是LOB定位器,而不是LOB的值。而要对某一LOB的值进行访问和维护操作,必需通过其定位器来进行。DBMS_LOB包中提供的所有函数和过程都以LOB定位器作为参数。 

    DBMS_LOB包中主要提供了以下几个过程供用户对内部LOB字段进行维护。 
      
      APPEND()将源LOB中的内容加到目的LOB中 
      COPY()从源LOB中复制数据到目的LOB   
      ERASE()删除LOB中全部或部分内容 
      TRIM()将LOB值减少到指定的长度 
      WRITE()向LOB   中写入数据 
      COMPARE()比较两个同种数据类型的LOB的部分或全部值是否相同 
      GETLENGTH()获取LOB的长度 
      READ()从LOB中读出数据 
    搜索
    1、 dbms_lob.append(
    dest_lob IN OUT NOCOPY BLOB,
    src_lob IN BLOB)
      dbms_lob.append(
                   dest_lob IN OUT NOCOPY CLOB CHARACTER SET ANY_CS,
                   src_lob  IN CLOB CHRACTER SET dest_lob%CHARSET);
    将源LOB变量的内容添加到目标LOB变量的尾部。
    示例:dest_lob clob;
           src_lob clob;
           dbms_lob.append(dest_lob,src_lob);
    2、 dbms_lob.close(lob_loc IN OUT NOCOPY BLOB/CLOB/BFILE)
    关闭已经打开的LOB。
    3、 dbms_lob.compare(
    lob_1 IN BLOB/CLOB/BFILE,
    lob_2 IN BLOB/CLOB/BFILE,
    amount IN INTEGER:=4294967295,--要比较的字符数(CLOB),字节数(BLOB)
    offset_1 IN INTEGER:=1,--lob_1的起始位置
    offset_2 IN INTEGER:=1--lob_2的起始位置)
      比较两个LOB的内容。
    4、dbms_lob.copy(
    dest_lob IN OUT NOCOPY BLOB/CLOB/NCLOB,
    src_lob IN BLOB/CLOB/NCOB,
    amount IN INTEGER,
    dest_offset IN INTEGER:=1,
    src_offset IN INTEGER:=1)
      从src_lob中,以src_offset为起始位置,截取amount个字符/字节,放到dest_lob的dest_offset位置。
    5、dbms_lob.createtemporary(
    lob_loc IN OUT NOCOPY BLOB/DLOB/NCLOB,
    cache IN BOOLEAN,
    dur IN PLS_INTEGER:=10)
      在用户的临时表空间中,建立临时LOB。
      lob_loc:指定LOB定位符。
      Cache:是否将LOB读取到缓冲区
      Dur:指定何时清除临时LOB(10:会话结束时。12:调用结束时)。
    6、dbms_lob.erase(
    lob_loc IN OUT NOCOPY BLOB/CLOB/NCLOB,
    amount IN OUT NOCOPY INTEGER,--字符/字节数
    offset IN INTEGER:=1—起始位置
    )
      删除LOB变量的内容。
    7、dbms_lob.fileclose(file_loc IN OUT NOCOPY BFILE)
    关闭打开的BFILE定位符所指向的OS文件
    8、dbms_lob.filecloseall关闭当前会话已经打开的所有BFILE文件。
    9、dbms_lob.fileexists(file_loc IN BFILE) RETURN INTEGER
    确定file_loc对应的OS文件是否存在,1:存在。0:不存在。
    10、dbms_lob.filegetname(
    file_loc IN BFILE,
    dir_alias OUT varchar2,
    filename OUT varchar2)
        获取BFILE定位符所对应的目录别名和文件名。
    11、dbms_lob.fileisopen(file_loc IN BFILE) RETURN INTEGER
    确定BFILE对应的OS文件是否打开。
    12、dbms_lob.freetemporary(lob_lob IN OUT NOCOPY BLOB/CLOB/NCLOB)
    释放在默认临时表空间中的临时LOB。
    13、dbms_lob.fileopen(file_loc IN OUT NOCOPY BFILE,
    Open_mode IN BINARY_INTEGER:file_readonly)
    打开文件。
    14、dbms_lob.getchunksize(lob_loc IN BLOB/CLOB/NCLOB) RETURN INTEGER
    当建立包含CLOB/BLOB列的表时,通过指定CHUNK参数可以指定操纵LOB需要分配的字节数(数据库尺寸的整数倍)默认为数据块的尺寸。
    15、dbms_lob.getlength(lob_loc IN BLOB/CLOB/BFILE/NCLOB) RETURN INTEGER
    获取长度。
    16、dbms_lob.instr(
    Lob_loc IN BLOB/CLOB/NCLOB/BFILE,
    Pattern IN RAW/VARCHAR2,
    Offset IN INTERGER:=1,
    Nth  IN INTEGER:=1) RETURN INTEGER;
      返回特定样式数据从LOB某偏移位置开始出现N次的具体位置。
    17、dbms_lob.idopen(lob_loc IN BLOB/CLOB/BFILE) RETURN INT
    确定LOB是否打开,打开:1,未打开:0。
    18、dbms_lob.istemporary(lob_loc IN BLOB/CLOB/NCLOB) RETURN INTEGER
    确定定位符是否为临时LOB。
    19、dbms_lob.loadfromfile(
    dest_lob IN OUT NOCOPY BLOB/CLOB,
    src_file IN FILE,
    amount IN INTEGER,
    dest_offset IN INTEGER:=1,
    src_offset IN INTEGER:=1)
      将BFILE的部分或全部内容复制到目标LOB变量。
    20、dbms_lob.loadblobfromfile(
    dest_lob IN OUT NOCOPY BLOB,
    src_bfile IN BFILE,
    amount IN INTEGER,
    dest_offset IN OUT INTEGER,
    src_offset IN OUT INTEGER)
    将BFILE数据装载到BLOB中,并且在装载后取得最新的偏移位置。
    21、dbms_lob.open(
    lob_loc IN OUT NOCOPY BLOB/CLOB/BFILE,
    open_mode IN BINARY_INTEGER)
    打开LOB,open_mode(只读:dbms_lob.lob_readonly,读写:dbms_lob.lob_readwrite).
    22、dbms_lob.read(
    lob_loc IN BLOB/CLOB/BFILE,
    amount IN OUT NOCOPY BINARY_INTEGER),--IN:要读取的字符数,     
                                               OUT:实际读取的字符数。
    Offset IN INTEGER,
    Buffer OUT RAW/VARCHAR2—存储数据的变量
    )
    将LOB数据读取到缓存区中(变量中)。
    23、dbms_lob.substr(
    Lob_loc IN BLOB/CLOB/BFILE,
    Amount IN INTEGER:=32762,
    Offset IN INTEGER:=1) RETURN RAW/VARCHAR2
    与字符处理函数SUBSTR()使用方法一样。
    24、dbms_lob.trim(
    Lob_loc IN OUT NOCOPY BLOB/CLOB/NCLOB,
    Newlen IN INTEGER)
    截断LOB到指定长度。
    25、dbms_lob.write(
    Lob_loc IN OUT NOCOPY BLOB/CLOB,
    Amount IN BINARY_INTEGER,
    Offset IN INTEGER,
    Buffer IN RAW/VARCHAR2)
    缓冲区数据写入到LOB中的特定位置。
    26、dbms_lob.writeappend(
    Lob_loc IN OUT NOCOPY BLOB/CLOB/NCLOB,
    Amount IN BINARY_INTEGER,
    Buffer IN RAW/VARCHAR2)
       将缓冲区数据写到LOB尾部。
  • 相关阅读:
    期中架构实现步骤
    安装centos以及优化步骤
    inotify+rsync实现实时热备
    [转]ubuntu安装vncserver实现图形化访问
    [转]电烙铁的使用小技巧
    彻底解决 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    解读系统托盘图标隐藏(删除)
    一个小公式帮你轻松将IP地址从10进制转到2进制
    [查阅]Dalvik opcodes
    [查阅]MSIL Instruction Set
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299336.html
Copyright © 2011-2022 走看看