课件补充章节大型对象_第1页
课件补充章节大型对象_第2页
课件补充章节大型对象_第3页
课件补充章节大型对象_第4页
课件补充章节大型对象_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 创建并维护LOB数据类型 区分内部LOB和外部LOB 使用PL/SQL包DBMS_LOB 区分LONG 和LOB数据类型 描述临时LOB的用途 l大型对象(大型对象(LOB)是一种数据类型,不属于对象是一种数据类型,不属于对象类型。它是为支持未结构化数据设计的类型。它是为支持未结构化数据设计的l未结构化数据是不能被再次分为标准的组成部分未结构化数据是不能被再次分为标准的组成部分的数据的数据l大型对象分为两类大型对象分为两类 内部大型对象:内部大型对象: BLOB、CLOB 和和 NCLOB外部大型对象:外部大型对象: BFILEl它们允许您存储无结构数据组成的程序块,如文它们允许您存储无结构

2、数据组成的程序块,如文本、图形图像、视频剪辑和声波,其大小最大可本、图形图像、视频剪辑和声波,其大小最大可达达 4 GBl基于基于 LOB 数据类型的列称为数据类型的列称为 LOB 列列 LOBlLOB 数据类型允许对数据进行高效、随机、分数据类型允许对数据进行高效、随机、分段的访问段的访问BLOBCLOBBFILECLOB 即 Character LOB(字符 LOB),它能够存储大量字符数据BLOB 即 Binary LOB(二进制 LOB),可以存储较大的二进制对象,如图形、视频剪辑和声音文件 BFILE 即 Binary File(二进制文件),它用于将二进制数据存储在数据库外部的操作

3、系统文件中LOB 由两个不同的组件构成由两个不同的组件构成 值值 l 是要存储的实际数据是要存储的实际数据 定位器定位器(Locator) l 一个指针,是指定数据库中对象位置的指示一个指针,是指定数据库中对象位置的指示器器 lLOB 列列/属性必须设置为非空属性必须设置为非空, 即它必须有一个定位即它必须有一个定位器。器。 You can accomplish this by initializing the internal LOB to empty in an INSERT/UPDATE statement using the functions EMPTY_BLOB() for BLO

4、Bs or EMPTY_CLOB() for CLOBs and NCLOBs. lLOB 列存储的是对象的定位器列存储的是对象的定位器 l可以存储可以存储 LOB在数据库内部(内部在数据库内部(内部 LOB 或嵌入)或嵌入)在数据库外(外部在数据库外(外部 LOB 或脱机),例如在或脱机),例如在操作系统文件中操作系统文件中 lLOB 在单一列实例中最多可以存储在单一列实例中最多可以存储 4GB 数据数据 l在在Oracle服务器中,把服务器中,把BLOB数据类型解数据类型解释为一个比特流,把释为一个比特流,把CLOB数据类型解数据类型解释为一个单字节字符流,而释为一个单字节字符流,而NCL

5、OB数据数据类型被理解为多字节字符流,其字节的类型被理解为多字节字符流,其字节的长度依赖于数据库字符集。长度依赖于数据库字符集。lBFILE是外部大型对象,存储在数据库是外部大型对象,存储在数据库表空间外面的操作系统文件中表空间外面的操作系统文件中lBFILE数据是只读的,所以他们不参与数据是只读的,所以他们不参与事务处理事务处理lDIRECTORY是一种无模式的数据库对象,提供对在Oracle 9i服务器中的BFILE的反问和使用的管理lDIRECTORY为BFILE所在服务器中的文件系统的目录指定别名lDIRECTORY对象是操作系统文件的完整路径名的别名l通过CREATE DIRECTO

6、RY命令创建的DIRECTORY对象的信息存储在数据字典视图DBA_DIRECTORIES和ALL_DIRECTORIES中l与使用其他数据类型创建表相似与使用其他数据类型创建表相似 l示例示例 CREATE TABLE books (book_code CHAR(5), book_image BFILE, book_review CLOB);l与使用其他数据类型创建表相似与使用其他数据类型创建表相似 l示例示例 CREATE TABLE Lob_table ( Key_value NUMBER NOT NULL, F_lob BFILE) ;lCREATE DIRECTORY big_dir

7、 AS e:data; INSERT INTO Lob_table VALUES (21, BFILENAME(big_dir, Image1.gif); INSERT INTO Lob_table VALUES (22, BFILENAME(big_dir, image2.gif); CREATE OR REPLACE PROCEDURE displayBFILE_proc IS File_loc BFILE; Buffer RAW(1024); Amount BINARY_INTEGER := 1024; Position INTEGER := 1; BEGIN SELECT F_lob

8、INTO File_loc FROM Lob_table WHERE Key_value = 21; DBMS_LOB.OPEN (File_loc, DBMS_LOB.LOB_READONLY); LOOP DBMS_LOB.READ (File_loc, Amount, Position, Buffer); DBMS_OUTPUT.PUT_LINE(utl_raw.cast_to_varchar2(Buffer); Position := Position + Amount; END LOOP; DBMS_LOB.CLOSE (File_loc); EXCEPTION WHEN NO_DA

9、TA_FOUND THEN DBMS_OUTPUT.PUT_LINE(End of data); END;lLOB 列必须含有一个指向空或具体LOB值的定位器。lCreate table a_table (a1 BLOB);lINSERT INTO a_table VALUES (EMPTY_BLOB(); l使用使用 FOR UPDATE 子句完成显式锁定子句完成显式锁定 l示例示例 SELECT book_review FROM booksWHERE book_code = B0189FOR UPDATE;UPDATE booksSET book_review = Absolutely T

10、hrillingWHERE book_code = B0189;COMMIT;l使用使用 FOR UPDATE 子句完成显式锁定子句完成显式锁定 l示例示例 SELECT book_review FROM booksWHERE book_code = B0189FOR UPDATE;UPDATE booksSET book_review = Absolutely ThrillingWHERE book_code = B0189;COMMIT;lCREATE DIRECTORY big_cap_dir AS e:datasource; lUPDATE Lob_table SET f_lob =

11、BFILENAME(big_cap_dir, image3.gif) WHERE Key_value = 22; l使用使用 SELECT 语句只能显示语句只能显示 CLOB 数据数据类型中的数据类型中的数据l示例示例 SELECT book_code, book_reviewFROM books;l特定特定 BFILE 数据类型的只读例程数据类型的只读例程FILEEXISTS 函数函数l检查服务器上是否存在该文件检查服务器上是否存在该文件FILEISOPEN 函数函数l检查文件是否打开检查文件是否打开FILEOPEN 过程过程l打开文件打开文件FILEGETNAME 过程过程l获得目录别名和

12、文件名获得目录别名和文件名FILECLOSE 过程过程l关闭文件关闭文件l示例示例DBMS_LOB.FILEEXISTS(loc)DBMS_LOB.FILEISOPEN(loc)DBMS_LOB.FILEOPEN(loc)DBMS_LOB.FILECLOSE(loc)其中其中loc 是是 BFILE LOB 的定位器的定位器l示例示例DBMS_LOB.FILEGETNAME(loc, dir_alias, file_name)其中其中loc 是是 BFILE LOB 的定位器的定位器dir_alias 是目录别名的输出变量是目录别名的输出变量file_name 是文件名的输出变量是文件名的输出

13、变量l提供了用来访问和操纵提供了用来访问和操纵 LOB 的例程的例程 l所有例程都基于所有例程都基于 LOB 定位器工作定位器工作 l将一个将一个 LOB 定位器选入局部定位器选入局部 PL/SQL LOB 变变量,并使用该参数作为量,并使用该参数作为 DBMS_LOB 例程访问例程访问 LOB 值的输入参数值的输入参数 l对永久内部对永久内部LOB和临时和临时LOB可以进行读取和修可以进行读取和修改操作,对于外部大型对象改操作,对于外部大型对象BFILE只能进行读只能进行读取操作取操作l在指定偏移处开始从在指定偏移处开始从 LOB 读取数据读取数据 DBMS_LOB.READ(loc, am

14、ount, offset, buff)其中其中loc 是是 LOB 定位器定位器amount是将要读取的字节是将要读取的字节/字符数量字符数量offset 是以字节是以字节/字符表示的距字符表示的距 LOB 起始位置的偏移起始位置的偏移量量buff 是读取操作的输出缓冲区是读取操作的输出缓冲区l从指定偏移处开始返回部分从指定偏移处开始返回部分 LOB 值值 DBMS_LOB.SUBSTR(loc, amount, offset)其中其中loc 是是 LOB 定位器定位器 amount 是将要读取的字节是将要读取的字节/字符数量字符数量offset 是以字节是以字节/字符表示的距字符表示的距 L

15、OB 起始位置起始位置 的偏移量的偏移量l返回返回 LOB 中第中第 n 处发生的匹配模式的位置处发生的匹配模式的位置 DBMS_LOB.INSTR(loc, ptrn, offset, ocrs)其中其中loc 是是 LOB 定位器定位器Ptrn 是测试模式是测试模式offset 是一字节是一字节/字符为单位的模式匹配开始位置的字符为单位的模式匹配开始位置的偏移量偏移量ocrs 是发生号是发生号,也就是要进行的第也就是要进行的第N次匹配(从次匹配(从 1 开开始)始)l获得获得 LOB 值的长度值的长度 DBMS_LOB.GETLENGTH(loc)其中其中: loc 是是 LOB 定位器定

16、位器DECLARE Image1 CLOB; ImageNum INTEGER := 101; BEGIN SELECT story INTO Image1 FROM Multimedia_tab WHERE clip_id = ImageNum; DBMS_OUTPUT.PUT_LINE(Size of the Image is: | DBMS_LOB.GETLENGTH(Image1); /* 更多的更多的 LOB 程序程序 */ END; l比较两个比较两个 LOB 值值DBMS_LOB.COMPARE(loc1, loc2, amount, offset1, offset2)其中其中l

17、oc 是要进行比较的第一个是要进行比较的第一个 LOB 的定位器的定位器 loc2 是要进行比较的第二个是要进行比较的第二个 LOB 的定位器的定位器amount 是要比较的字节是要比较的字节/字符数量字符数量offset1 是以字节是以字节/字符为单位的第一个字符为单位的第一个 LOB 的偏移量的偏移量offset2 是以字节是以字节/字符为单位的第二个字符为单位的第二个 LOB 的偏移量的偏移量l将数据写入到将数据写入到 LOB 的指定偏移位置的指定偏移位置 DBMS_LOB.WRITE(loc, amount, offset, buff)其中其中loc 是是 LOB 定位器定位器Amou

18、nt 是要写入的字节是要写入的字节/字符数量字符数量offset 是以字节是以字节/字符为单位的距字符为单位的距 LOB 起始位置进起始位置进行写操作的偏移量行写操作的偏移量buff 是写操作的输入缓冲区是写操作的输入缓冲区l将源将源 LOB 的内容追加到目的的内容追加到目的 LOBDBMS_LOB.APPEND(loc1, loc2)其中其中 loc1 是目的是目的 LOB 定位器定位器loc2 是源是源 LOB 定位器定位器l删除删除 LOB 的全部或部分内容的全部或部分内容DBMS_LOB.ERASE(loc, amount, offset)其中其中loc 是是 LOB 定位器定位器amount 是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论