`
fw2003
  • 浏览: 79336 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

dbms_lob包的用法

阅读更多

<=====插入图片========>
create directory img as 'c:\img';

保证在服务器端即192.168.0.250的C盘下有名为img的文件夹并在此目录下有"1.jpg"这张图片并保证当前用户有对此目录的读取权限(如果读取文件用户不是创建目录的用户那么要用创建目录的用户执行grant read on directory img to XXX)

create or replace procedure insert_image(img_dir varchar2,img_name varchar2)
is
 img_blob blob;
 img_bfile bfile;
begin
  /*将通过empty_blob()函数将类型为blob的列初始化为空以便以后填充*/
  insert into fw.my_image values(empty_blob())
  return fw.my_image.img into img_blob;
 
  img_bfile := bfilename(img_dir,img_name); --获得定位器指向的目录和文件
  if (dbms_lob.fileexists(img_bfile)!=0) then --如果文件定位器指向的文件存在
    dbms_lob.fileopen(img_bfile,dbms_lob.file_readonly); --打开目标文件
   
    /*将文件字节流数据加载到指定的LOB类型变量中*/
    dbms_lob.loadfromfile(img_blob,img_bfile,dbms_lob.getlength(img_bfile));
   
    dbms_lob.fileclose(img_bfile);--关闭文件
    commit;
    dbms_output.put_line('已经从'||img_dir||'目录中读取了图片'||img_name||'向表中插入');
 
  else--如果文件定位器指向的文件不存在
    dbms_output.put_line('文件没找到');
  end if;
 
  exception when others then
  dbms_output.put_line(sqlerrm);
end;

调用过程
declare
 
begin
  fw.insert_image('IMG','1.jpg');
end;

<====将查询结果转化为XML格式并打印======>

create or replace procedure query_to_xml
is
 clob_var clob;
 xml_content varchar2(32767);
 line_content varchar2(4000);
 line_id int; --行号
begin
   line_id := 0;
   clob_var := dbms_xmlquery.getXML('select * from fw.math');  --将查询SQL返回的结果集合转化为XML格式并交给一个CLOB变量保存
   xml_content := dbms_lob.substr(clob_var,32767); --截取此CLOB变量保存的全部数据并交给一个PL/SQL里的varchar2类型变量保存(最大长度为32767)
   dbms_output.put_line('以下是math表的记录转化而成的XML文档内容');
    while xml_content is not null   --循环
     loop
       line_id := line_id+1; --行号++
       line_content := substr(xml_content,1,instr(xml_content,'>')); --提取第1行
       dbms_output.put_line(line_id||':'||line_content);  --打印行号和行内容
       xml_content := substr(xml_content,instr(xml_content,chr(10))+1,length(xml_content)); --把已经读取的行从整个XML数据里剔除掉,那么剩下的XML数据的第1行就是整个XML数据的第2行,依此类推,进行遍历(chr(10)返回一个换行符)
     end loop;

    /*异常处理*/
     exception when others then
     dbms_output.put_line(sqlerrm);
end;

length(xml_content)这个参数也可以不写 原因如下:

select substr('abcde',2,3) from dual  结果是bcd
select substr('abcde',2) from dual 结果是bcde 不写第3个参数即不告诉系统你要提取几个字符时默认从第2个字符开始将后面的字符都提取出来
select instr('worldwide','d') from dual 结果是5 即返回第2个参数在字符串里第1次出现的位置

 

分享到:
评论
2 楼 fw2003 2007-12-13  
oracle里的varchar2是4000 不过我是在PL/SQL里声明的一个varchar2类型 最大长度是32767
区别只是如果这个变量长度超过4000的话 无法将其的值插入到某张表的varchar2类型列里
1 楼 trumy 2007-11-20  
varchar2的最大长度是4000,如果想用字符串的函数,建议这里可以把xml_content改成long属性的变量。

相关推荐

    oracle dbms_lob

    oracle dbms_lob

    oracle .

    Oracle数据库基础 查询基础 表及索引的定义操作 视图、同义词和序列 簇与分区 复杂查询语句的使用 ...LOB和DBMS_LOB包简介 临时LOB 外部LOB (BFILE) PL/SQL编程技巧 SQL及SQL*PLUS 命令参考 ......

    orcale常用命令

    下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。 1、用户 查看当前用户的缺省表空间 SQL&gt;select username,default_tablespace from user_users; 查看当前用户的角色 SQL&gt;select * from user_...

    数据库基础

    第十七章 创建包和使用包 287 §17.1 引言 287 §17.2 包的定义 288 §17.3 包的开发步骤 289 §17.4 包的头部说明 289 §17.5 包体的说明 290 §17.6 删除过程、函数和包 293 §17.7 包的管理 293 §17.7.1 包有关...

    Oracle8i_9i数据库基础

    第十七章 创建包和使用包 287 §17.1 引言 287 §17.2 包的定义 288 §17.3 包的开发步骤 289 §17.4 包的头部说明 289 §17.5 包体的说明 290 §17.6 删除过程、函数和包 293 §17.7 包的管理 293 §17.7.1 包有关...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    LOB数据类型 clob 1~4GB 只能存储字符数据 nclob 1~4GB 保存本地语言字符集数据 blob 1~4GB 以二进制信息保存数据 三、 DDL语言 1. Create table命令 用于创建表。在创建表时,经常会创建该表的主键、外键、唯一...

    Oracle事例

    手工刷新快照,(调用DBMS_SNAPSHOT包中的refresh过程)DBMS_SNAPSHOT.refresh(snapshot_name,refresh_type); begin DBMS_SNAPSHOT.REFRESH(\'snap_to_html\',\'c\'); end; 对所有快照进行刷新 begin DBMS_...

    精通Oracle.10g.PLSQL编程

    使用LOB对象 16.1 LOB简介 16.2 DBMS LOB包 16.3 访问LOB 16.3.1 访问CLOB 16.3.2 访问BLOB 16.3.3 访问BFILE 16.4 习题 第17章 使用Oracle系统包 17.1 DBMS_OUTPUT 17.2...

    PL/SQL 基础.doc

    DBMS_OUTPUT.PUT_LINE(v_emp(200).id||' '||v_emp(200).lastname||' '||v_emp(200).salary); END; 注:1) id(索引) 的数目的限制由BINARY_INTEGER的范围决定(-2147483647&lt;-----&gt;2147483647); 2) TABLE类型与...

    oracle详解

    以下为简要使用步骤,如果想参考详细使用方法,也可以参考ORACLE联机帮助。 1.设置表空间为只读(假定表空间名字为APP_Data 和APP_Index) alter tablespace app_data read only; alter tablespace app_index read ...

    最全的oracle常用命令大全.txt

    下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。 1、用户 查看当前用户的缺省表空间 SQL&gt;select username,default_tablespace from user_users; 查看当前用户的角色 SQL&gt;select * from user_...

Global site tag (gtag.js) - Google Analytics