如何操作BLOB、CLOB、BFILE

BFILE        二进制文件,存储在数据库外的操作系统文件,只读的。把此文件当二进制处理。

BLOB        二进制大对象。存储在数据库里的大对象,一般是图像声音等文件。

CLOB        字符型大对象。一般存储大数量文本信息。存储单字节,固定宽度的数据。

NCLOB        字节字符大对象。存储单字节大块,多字节固定宽度,多字节变宽度数据

BFILE

The BFILE data type enables access to binary file LOBs that are stored in file systems outside Oracle Database. A BFILE column or attribute stores a BFILE locator, which serves as a pointer to a binary file on the server file system. The locator maintains the directory name and the filename.

通过bfile类型,oracle数据库可以访问存储在操作系统上的二进制文件。我们可以认为在bfile中存放的是指向操作系统文件的指针。使用bfile必须首先创建directory,并具有相应的权限。

You can change the filename and path of a BFILE without affecting the base table by using the BFILENAME function.

通过bfilename内置函数设置bfile类型的值,该函数具有两个参数,即directory和filename。

Binary file LOBs do not participate in transactions and are not recoverable. Rather, the underlying operating system provides file integrity and durability. BFILE data can be up to 264-1 bytes, although your operating system may impose restrictions on this

maximum.The database administrator must ensure that the external file exists and that Oracle processes have operating system read permissions on the file.The BFILE data type enables read-only support of large binary files. You cannot modify or replicate such a file. Oracle provides APIs to access file data. The primary interfaces that you use to access file data are the DBMS_LOB package and Oracle Call Interface (OCI).

对bfile指向的操作系统文件的操作,不被数据库事务管理,有操作系统来负责一致性和持久性,bfile可以处理的文件大小为2^64-1个字节,因此对bfile文件大小的限制往往来自操作系统层面。对于bfile指向的文件,数据库具有只读权限,不可以编辑和复制。我们主要通过DBMS_LOB包来管理和操作bfile类型数据。

<span style="font-size:12px">[oracle@oadata dir1]$ pwd
/home/oracle/oradir/dir1
[oracle@oadata dir1]$ ls
1.txt  2.txt
[oracle@oadata dir1]$ cat 1.txt
1
2
3
4
5
6
[oracle@oadata dir1]$ cat 2.txt
a
b
c
d
[oracle@oadata dir1]$ sqlplus / as sysdba  

SQL*Plus: Release 11.2.0.3.0 Production on 星期六 10月 12 11:58:08 2013  

Copyright (c) 1982, 2011, Oracle.  All rights reserved.  

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options  

SQL> create direcotry dir1 as '/home/oracle/oradir/dir1';
create direcotry dir1 as '/home/oracle/oradir/dir1'
       *
第 1 行出现错误:
ORA-00901: 无效 CREATE 命令  

SQL> create directory dir1 as '/home/oracle/oradir/dir1';  

目录已创建。  

SQL> grant read,write on directory dir1 to easy;  

授权成功。  

SQL> conn easy/jodezhu
已连接。
SQL> show user
USER 为 "EASY"
SQL> create table tab_bfile (id number,bf bfile);  

表已创建。  

SQL> insert into tab_bfile values(1,bfilename('DIR1','1.txt'));  

已创建 1 行。  

SQL> insert into tab_bfile values(2,bfilename('DIR1','2.txt'));  

已创建 1 行。  

SQL> commit;  

提交完成。  

SQL> select * from tab_bfile;  

    ID
----------
BF
----------------------------------------------------------------------------------------------------
     1
bfilename('DIR1', '1.txt')  

     2
bfilename('DIR1', '2.txt')  

SQL> set serveroutput on
DECLARE
  r tab_bfile%rowtype;
  CURSOR c
  IS
    SELECT id,bf FROM tab_bfile;
  AMOUNT INTEGER := 100;
  OFFSET INTEGER := 1;
  OUTRAW VARCHAR2(100);
BEGIN
  OPEN c;
  LOOP
    FETCH c INTO r;
    EXIT
  WHEN c%notfound;
    dbms_output.put_line(r.id);
    dbms_lob.open(r.bf,DBMS_LOB.LOB_READONLY);
    DBMS_LOb.READ(r.bf,amount,offset,outraw);
    dbms_output.put_line(outraw);
    dbms_lob.close(r.bf);
  END LOOP;
 21  END;
 22  /
1
310A320A330A340A350A360A
2
610A620A630A640A  

PL/SQL 过程已成功完成。  

SQL> </span>

bfile类型在使用之前,必须要先打开。

BLOB\CLOB\NCLOB

blob\clob\nclob称为内部lob(bfile称为外部lob),其大小限制为2^32-1与所在表空间数据块大小乘积,大概范围在8T到128T,因此多数情况下,我们不必担心存储上限的问题。blob类型存储的是二进制流数据,而clob和nclob存储的是大规模的字符数据,在clob中按照数据库的字符集存储,而在nclob中按照数据库的国家字符集存储。内部lob由于存储在数据库内部,因此参与数据库的事务处理,在发送错误时可以进行回滚处理。可以通过plsql dbms_lob包或者oci接口来处理lob数据。

对lob数据的处理,可以不用在open/close函数对之间运行,此时,伴随着对lob的处理,会及时更新相应的索引,这可能会影响效率。当我们将其放在open/close对中时,则在close时,对索引进行更新。open/close必须成对出现。  

注意:

It is an error to commit the transaction before closing all opened LOBs that were  opened by the transaction. When the error is returned, the openness of the open LOBs is discarded, but the transaction is successfully committed. Hence, all the changes made to the LOB and non-LOB data in the transaction are committed, but the domain and function-based indexes are not updated. If this happens, you should rebuild the functional and domain indexes on the LOB column.

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索sql
, 数据库
, oracle
, 存储
, 文件
The
oracle clob操作、plsql clob 操作、java操作clob、hibernate 操作clob、mybatis 操作clob,以便于您获取更多的相关知识。

时间: 2024-08-01 17:55:06

如何操作BLOB、CLOB、BFILE的相关文章

JDBC中操作Blob、Clob等对象

很多网友都不知道JDBC中如何操作Blob.Clob等对象,其实这是不难的!操作这些对象就象操作其它String.int一样.不信!你就看下面的文章.下面的例子会带你首先创建包含Clob.Blob对象的数据库的表,然后写入这些对象,最后再读取并操作这些对象! 一.关于Derby www.open-open.com是这样介绍Derby的"Apache Derby 是一种高质量的.纯 Java 的嵌入式关系数据库引擎,IBM 最近已将其捐献给开放源码社区.Derby 数据库基于文件系统,具有高度的可

ORACLE大數据類型的操作之一CLOB

oracle        ORACLE大數据類型的操作之一CLOB 作者: CCBZZP     大家在應用ORACLE的時候, 可能經常會用到對大數据類型的操作, 在這里我簡單的總結一下, 希望對大家能有所幫助! 也歡迎大家一起來探討, 以便共同進步, 共同發展!    本文對ORACLE的高手來說是不用看的.  1. 如何創建帶有CLOB類型字段的表?     CREATE TABLE TEST2 (AAA CLOB);  2. 如何對帶有CLOB類型字段的表增加記錄?     INSER

ado-VC++ADO+SQLServer操作Blob文件的读取

问题描述 VC++ADO+SQLServer操作Blob文件的读取 请问如何才能通过MFC ADO 读出SQL Server中的Blob文件,并保存在一个临时文件中?

blob clob区别

原文地址:http://blog.163.com/chengwei_1104/blog/static/536452742008112292122537/ 1.BLOB     BLOB全称为二进制大型对象(Binary   Large   Object).它用于存储数据库中的大型二进制对象.可存储的最大大小为4G字节     2.CLOB     CLOB全称为字符大型对象(Character   Large   Object).它与LONG数据类型类似,只不过CLOB用于存储数据库中的大型单字

oracle如何导出部分字段为blob,clob字段的记录?

问题描述 ORACLE中,比如想导出某个表中的若干记录,但这些记录有的字段是BLOG字段的,那么能实现么? 问题补充:AngelAndAngel 写道 解决方案 http://jackyrong.iteye.com/blog/1157279解决方案二:EXP可能会报错 而且应该不是你想要的数据.解决方案三:收到没有?解决方案四:你导出到哪里 一般导出的时候 要把这样的数据当作流来看待,然后读取流 一步步的读出来就行了.比如你getBlog的时候会自动转化成流的类型.希望对你有用.解决方案五:另外

使用java操作Oracle数据库中的CLOB数据类型

字段类型:blob,clob,nclob 说明:三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频.视频等非文本文件,最大长度是4GB.LOB有几种类型,取决于你使用的字节的类型,Oracle 8i实实在在地将这些数据存储在数据库内部保存.可以执行我们所操作的clobtest_table中属性是(字符型id,CLOB型picstr),目前我们假设一个大的字符对象str已经包含了我们需要存入picstr字段的数据.而且connection

spring+hibernate里面操作clob字段

  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  <property name="hibernateProperties">   <props>    <prop key="hibernate.dialect">org.hibernate

解析使用jdbc,hibernate处理clob/blob字段的详解_java

(1)不同数据库中对应clob,blob的类型:mysql中 : clob对应text  blob对应blobdb2/oracle中 clob对应clob blob对应blob (2)domain中对应类型:clob 对应 String   blob 对应 byte[]clob 对庆 java.sql.Clob blob 对应 java.sql.Blob (3)hibernate配置文件中对应类型:clob > clob   blob > binay 也可以直接使用数据库提供类型,例如:ora

Php操作oracle数据库指南-本人原创,经验总结,不能不看

oracle|数据|数据库|原创 本人由于工作关系使用Oracle数据库,发现这里用的人不多,但时常发现有人提的关于PHP操作ORACLE数据库的问题得不到回答,我也曾问过几个,但也无人响应,因此决定把本人在工作中积攒起来的一些技巧.经验奉献出来,希望对使用oracle数据库的人有所帮助.一.配置环境:访问Oracle8以上的数据库需要用到Oracle8 Call-Interface(OCI8).这个扩展模块需要Oracle8 的客户端函数库,因此需要你要连接远程Oracle数据库的话,还要装上