- 1、本文档共44页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 高斯小学奥数含答案二年级(下)第06讲-扫雷游戏.pdf VIP
- 《景区运营与管理实务》课件——旅游景区管理要素.pptx VIP
- GB50171-2012 电气装置安装工程 盘、柜及二次回路接线施工及验收规范.pdf VIP
- 《工程制图》教学教案(1-10次课,合计50次课).doc VIP
- 统编版道德与法治九年级上册第三单元《文明与家园》作业设计.docx
- 高斯小学奥数含答案二年级(下)第06讲扫雷游戏.pdf VIP
- 旅游景区运营管理手册(制度)[257页].doc VIP
- 中南大学ORcad实验报告(程嘉洲版实验2到实验7)完美步骤,完美报告!.doc
- 部编版九年级道德与法治第四单元《文明与家园》作业设计.docx
- 《工程制图》教学教案(11-20次课,合计50次课).doc VIP
文档评论(0)