zoukankan      html  css  js  c++  java
  • oracle lob字段处理

    Oracle和plsql都支持lob(large object) 类型,用来存储大数量数据,如图像文件,声音文件等。Oracle 9i realse2支持存储最大为4g的数据,oracle 10g realse1支持最大8到128万亿字节的数据存储,依赖于你的db的block size。
    在plsql中可以申明的lob类型的变量如下:
    BFILE        二进制文件,存储在数据库外的操作系统文件,只读的。把此文件当二进制处理。
    BLOB        二进制大对象。存储在数据库里的大对象,一般是图像声音等文件。
    CLOB        字符型大对象。一般存储大数量文本信息。存储单字节,固定宽度的数据。
    NCLOB      字节字符大对象。存储单字节大块,多字节固定宽度,多字节变宽度数据。
    Oracle将lob分类为两种:
    1.存储在数据库里的,参与数据库的事务。BLOB,CLOB,NCCLOB。
    2.存储在数据库外的BFILE,不参与数据库的事务,也就是不能rollback或commit等,它依赖于文件系统的数据完整性。
    模拟插入更新.....
    SQL> create table testlob(
      
    2  id integer,
      
    3  content blob);

    表已创建。

    SQL
    > create sequence seq_ad_id start with 1
      
    2  maxvalue 999999999999
      
    3  nocycle;

    序列已创建。


    SQL
    > insert into testlob values(seq_ad_id.nextval,utl_raw.cast_to_raw('我考'));

    已创建 
    1 行。

    SQL
    > commit;

    提交完成。

    SQL
    > 
    SQL
    > select id,utl_raw.cast_to_varchar2(content) from testlob;

            ID
    ----------
    UTL_RAW.CAST_TO_VARCHAR2(CONTENT)
    --------------------------------------------------------------------------------
             3
    我考

    这里使用了utl_raw的两个过程utl_raw.cast_to_raw()和cast_to_varchar2()来插入查询blob字段数据
    对于clob和nclob类型,可以通过to_char()来查询
    测试将外部文件插入BLOB。
    连接到: 
    Oracle 
    Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options

    SQL
    > CREATE OR REPLACE PROCEDURE insert_blob(p_filename varchar2IS
      
    2    i_blob BLOB;
      
    3    i_file BFILE := BFILENAME('UTL_DIR',p_filename);
      
    4  BEGIN
      
    5    INSERT INTO testlob (a)VALUES (EMPTY_BLOB())
      
    6    RETURNING a INTO i_blob;
      
    7  
      
    8    DBMS_LOB.FILEOPEN(i_file);
      
    9    DBMS_LOB.LOADFROMFILE(i_blob, i_file, DBMS_LOB.GETLENGTH(i_file));
     
    10    DBMS_LOB.FILECLOSE(i_file);
     
    11  
     
    12    COMMIT;
     
    13  END;
     
    14  /

    过程已创建。

    SQL
    > create or replace directory utl_dir as 'E:\oracle\oracle10g';

    目录已创建。

    SQL
    > 
    SQL
    > grant read,write on directory utl_dir to public;

    授权成功。

    SQL
    > exec insert_blob('第 10 章:监控和调整数据库.pdf');

    PL
    /SQL 过程已成功完成。

    SQL
    > SELECT DBMS_LOB.GETLENGTH(a) from testlob;

    DBMS_LOB.GETLENGTH(A)
    ---------------------
                        4
                  
    2020742
                  
    4872578

    SQL
    >

    使用 DBMS_LOB.GETLENGTH(a) 来验证插入数否成功
  • 相关阅读:
    IIC/I2C从地址之7位,8位和10位详解
    ARM uxtw
    ARM(CM3)的汇编指令
    WZR/XZR ARM
    LDR r, label 和 LDR r, =label的区别
    Distinguishing between 32-bit and 64-bit A64 instructions
    03JavaScript程序设计修炼之道_2019-06-18_20-39-14_事件onload&onmouseover&out
    02-CSS基础与进阶-day6_2018-09-05-20-18-21
    02-CSS基础与进阶-day5_2018-09-03-22-10-39
    02-CSS基础与进阶-day5_2018-09-03-21-41-57
  • 原文地址:https://www.cnblogs.com/zeromyth/p/1574439.html
Copyright © 2011-2022 走看看