• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Myth's space
好好学习,不见进步
博客园    首页    新随笔    联系   管理    订阅  订阅

oracle lob字段处理

如何插入,读取LOB字段,以及不同的工具对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 varchar2) IS
  
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) 来验证插入数否成功
posted @ 2009-09-26 12:36  Mr.Myth  阅读(881)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3