`
fw2003
  • 浏览: 80301 次
  • 性别: 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

    同时,“dbms_lob包学习笔记之二:append和write存储过程.pdf”可能进一步详细讲解了`APPEND`和`WRITE`这两个常用过程的具体用法和注意事项。 总之,`DBMS_LOB`是Oracle数据库管理LOB数据的关键工具,对于处理大量...

    Oracle如何对CLOB行字段来执行全文检索

    幸运的是,通过使用 DBMS_LOB 包,我们可以实现对 CLOB 字段中的内容进行 Like 查找。 CLOB 行字段的存储 在 Oracle 数据库中,CLOB 行字段是用于存储大文本数据的数据类型。CLOB 字段可以存储大量的文本数据,...

    BLOB和CLOB的区别以及在ORALCE中的插入和查询操作

    - CLOB插入:对于CLOB,可以使用类似的方法,如DBMS_LOB.CREATETEMPORARY和DBMS_LOB.WRITETEMPORARY,但传递的是字符串数据。 ```sql DECLARE clob_var CLOB; BEGIN DBMS_LOB.CREATETEMPORARY(clob_var, TRUE)...

    Oracle的大对象处理(代码加注释)

    读取LOB数据同样需要使用`DBMS_LOB`包。以下是一个读取并输出BLOB数据的例子: ```plsql DECLARE l_file UTL_FILE.FILE_TYPE; l_buffer RAW(32767); l_amount NUMBER; BEGIN SELECT content INTO l_file ...

    Oracle内置包的使用方法.rar

    本文将详细介绍Oracle内置包的使用方法,包括它们的功能、调用方式以及示例应用。 1. **DBMS_UTILITY**: 这个包主要用于数据库的实用功能,如格式化SQL语句(UTL_FMT),获取数据库版本信息,以及执行PL/SQL块等。...

    Oracle8i对Blob和Clob类型的操作

    3. **SELECT**:通过SELECT语句读取LOB数据,可以使用DBMS_LOB.GETLENGTH函数获取长度,DBMS_LOB.SUBSTR函数截取部分内容。 4. **BULK COLLECT**:对于大量LOB操作,使用BULK COLLECT INTO语句可以提高性能。 5. **...

    DM7_System_Packages.pdf

    这份系统包使用手册详尽地介绍了达梦数据库中的系统包,包括它们的功能、使用方法和示例,为数据库开发者和管理员提供了强有力的参考资料。通过学习这份手册,用户可以更好地掌握达梦数据库的高级功能,提高开发和...

    Oracle_SQL注入

    - **步骤1:创建包**:攻击者需要通过注入`SYS.DBMS_EXPORT_EXTENSION`函数,在Oracle上创建名为`LinxUtil`的Java包。 - **Java包内容**:该Java包包含两个函数,`runCMD`用于执行系统命令,`readFile`用于读取...

    在ORACLE数据库中如何对多媒体数据对象进行处理.pdf

    在实际应用中,开发者可以使用DBMS_LOB包中的函数和过程,例如DBMS_LOB.COPY用于复制LOB数据,DBMS_LOB.WRITE用于向LOB中写入数据,DBMS_LOB.GETLENGTH用于获取LOB的长度,DBMS_LOB.INSTR用于查找子字符串在LOB中的...

    oracle(blob转换为clob)

    `DBMS_LOB`是Oracle提供的一个用于操作大对象(LOB)的包。它包含了多种用于创建、读取、写入、删除和查询LOB数据的方法。在这个场景下,我们主要使用了`DBMS_LOB.CREATETEMPORARY`和`DBMS_LOB.WRITEAPPEND`两个过程...

    lob笔记.doclob笔记.doc

    根据给定文件的部分内容,我们可以深入探讨在PostgreSQL数据库中如何处理大对象(LOB,Large Object)以及Blob、Clob的使用方式与管理机制。以下将详细解释这些知识点: ### Blob与Clob在PostgreSQL中的实现 #### ...

    关于oracle中大对象处理的一些方法和实例.txt

    为了管理LOB数据,Oracle提供了一组专门的包——`DBMS_LOB`。该包包含了多个过程和函数,可以用来读取、写入、复制、移动、删除LOB数据以及其他高级操作。 - **读取LOB数据**:`DBMS_LOB.READ` - **写入LOB数据**:...

    模拟分批导出BLOB大字段.txt

    DBMS_LOB.LOADFROMFILE(B_LOB, F_LOB, DBMS_LOB.GETLENGTH(F_LOB)); -- 传递对象 DBMS_LOB.FILECLOSE(F_LOB); -- 关闭原始文件 COMMIT; END; ``` 通过调用这个存储过程可以将位于特定路径下的图像文件插入到...

    Oracle内置包_reference.rar

    Oracle数据库是世界上最广泛使用的数据库系统之一,其内置包是实现..."Oracle内置包_reference.rar"中的文档应该包含了这些包的详细信息,包括用法示例和最佳实践,对于任何想成为Oracle高手的人来说都是宝贵的资源。

    oracle,weblogic读写blob

    在 SQL 查询中,你可以使用 `SELECT BLOB_COLUMN FROM TABLE` 来读取 BLOB 数据,并通过 PL/SQL 包如 `UTL_FILE` 或 `DBMS_LOB` 来进行写入和更新。`DBMS_LOB` 提供了一系列的子程序,如 `DBMS_LOB.CREATETEMPORARY`...

    oracle使用存储过程插入文件至数据库操作方法

    ### Oracle 使用存储过程插入文件至数据库操作方法 在Oracle数据库管理中,经常需要处理大量数据与文件的操作。本文将详细介绍如何使用存储过程将文件插入到Oracle数据库中的具体步骤及注意事项。 #### 一、创建...

    oracle Blob转换Clob

    - 每次循环使用`DBMS_LOB.SUBSTR`读取一部分Blob数据,并将其转换为`VARCHAR2`类型。 - 使用`UTL_RAW.CAST_TO_VARCHAR2`进行类型转换。 - 通过`DBMS_LOB.WRITE_APPEND`方法将转换后的数据追加到临时Clob中。 4. ...

    判断blob字段是否为空

    虽然使用`DBMS_LOB.GETLENGTH`函数是判断BLOB字段是否为空的有效方法,但在大规模数据集中频繁使用可能会影响性能。因此,在设计数据库查询时,建议结合索引使用和适当的优化策略,以确保查询效率。 ### 结论 正确...

Global site tag (gtag.js) - Google Analytics