网站大量收购独家精品文档,联系QQ:2885784924

第09章 大对象、用户定义的不同类型.doc

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第09章 大对象、用户定义的不同类型

大对象和自定义结构化类型 数据库经常需要存储大型数据对象,如视频数据、音频数据、图片数据,DB2为存储这些对象提供了嵌入式类型支持,本章主要介绍如何使用大对象和自定义结构类型,开发人员能够使用这个功能特性实现应用开发。 本章主要内容: 大对象 用户定义的不同类型 用户定义的结构类型 9.1 大对象 VARCHAR和VARGRAPHIC数据类型具有32KB的存储限制。这些数据类型可以用于存储小的文件数据,但是,应用经常需要存储大文本数据,如声音、视频、图片和图象信息。DB2提供了三种类型,可以用来存储这些数据,最大能够到达2GB字节的数据。这三种大对象数据类型是BLOB、CLOB和DBCLOB。 每个DB2表都可以包含与LOB数据相关的任何单个LOB值,单个列可以包含24GB的LOB数据,一个表可以包含2GB字节的LOB数据。 不同的数据库位置存储所有的大对象数据值在表的记录外面。表中的每行都具有一个大对象的描述符。当操纵LOB的时候,访问大对象描述符价格导致小量溢出。 每个大对象列的最大尺寸是在CREATE TABLE语句声明的大对象类型的一部分。大对象列的最大尺寸决定了列中的任何LOB描述符的最大尺寸。其结果是,它决定了能够满足单行的所有数据类型的列的数量。LOB描述符的空间从60到300字节,这依赖于对应列的最大尺寸。 使用潜在的大对象数据,在移动和移出数据库的时候,LOB将显示数据库系统的性能降级。即使DB2不允许对LOB值的日志信息超过1GB,但是,LOB的日志信息将很快达到日志容量。如果LOB的日志超过1GB,将返回一个SQLCODE-355。 当选择一个LOB值的时候,具有三个选项: 选择整个LOB的值到一个本地变量。整个LOB值从服务器拷贝到客户机上。这样做的效率很低,有时是不可行的。本地变量使用客户内存缓冲区,可能没有足够的容量来存储LOB值。 选择一个LOB定位器到本地变量。LOB值依然保留在服务器上,LOB定位器移动到客户上。如果LOB的值非常大,需要作为一个或者多个子序列SQL语句的输入值,最好将值保存在定位器中。使用定位器减少了客户机和服务器之间通信负载。 选择整个LOB值到单个文件引用变量中,LOB值移动到客户机上的文件中。不需要通过应用内存。 一个大对象定位器是带有4字节值的本地变量,标识数据库服务器中的单个LOB。LOB定位器为用户提供了在应用中操纵非常大的数据的机制,使得将整个LOB值存储在应用可以访问的客户机器上。 后续语句能够使用定位器对数据执行操作,不需要提取整个大对象。定位器变量用于减少访问LOB的存储需求,通过减少服务器和客户机之间的数据流,提高了执行性能。 LOB定位器对于下面几种情况,非常适合: 当移动非长大的LOB数据的一小部分到客户程序。 当整个LOB不能放在应用内存中的时候。 当程序需要来自LOB表达式的临时LOB值,不需要保存 结果。 LOB定位器能够表示与LOB表达式相关的值,例如,下面的LOB定位器能够表示与下面这个表达式相关的值: SUBSTR( lob 1 CONCAT lob 2 CONCAT lob 3, start, length ) 理解LOB定位器是表示一个值,而不是表示数据库行和位置是非常重要的。值被选择到定位器中,用户将不能对源行和表执行操作,来影响定位器的值。与定位器相关的值是合法的,直到事务结束,或者直到定位器被显式释放。 LOB定位器是用于在事务中引用LOB值的一种机制,不会在创建的事务外面存在。FREE LOCATOR语句将释放定位器的值,通用,提交和回滚事务,将释放与事务相关的所有LOB定位器。而且,LOB定位器不是一个数据库类型,它不能存储到数据库中,其结果是不能参与视图和约束检查。但是,由于LOB定位器是LOB类型的客户描述,对于LOB定位器具有SQLTYPE,使得它们能够在SQLDA结构中描述,被FETCH、OPEN和EXECUTE使用。 如果需要从LOB提取数据,可以使用LOB定位器。如果需要访问的LOB非常大,这是一个比较好的选择。如果传递的LOB数据量很小,可以将数据直接传递到客户,避免使用定位器。 下面是在C中使用嵌套SQL的示例,使用LOB定位器提取LOB值: 声明LOB定位器本地变量。 EXEC SQL BEGIN DECLARE SECTION; char number[7]; sqlint32 deptInfoBeginLoc; sqlint32 deptInfoEndLoc; SQL TYPE IS CLOB_LOCATOR resume; SQL TYPE IS CLOB_LOCATOR deptBuffer; short lobind; char buffer[1000]=; char userid[9]; ch

文档评论(0)

cgtk187 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档