版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、DB2数据库对象基本数据库对象 数据库对象是一一个数据库的的构造块(bbuildiing bllock)。DDB2 提供供了不同类型型的数据库对对象来存储和和表示不同信信息。通过使使用数据定义义语言(DDDL),可以以创建、修改改和删除数据据库对象。要要操纵数据库库对象,可以以使用数据操操纵语言(DDML),例例如 SELLECT、UUPDATEE、INSEERT 和 SELECCT 语句。常常用的数据库库对象有:表 用户定义数据类类型 约束 视图 索引 除了 Famiily Fuundameentalss 教程里介介绍的一些数数据库对象外外,还有一些些其他的对象象,很多开发发人员在开发发 D
2、B2 应用程序时时会发现这些些对象比较有有用。本节我我们将介绍这这些对象。在继续之前,有有一点要注意意:在下面看看到的一些例例子中,对象象名称是以小小写形式指定定的。无论 DB2 在在哪个平台上上运行,它总总是以大写形形式存储名称称,除非标识识符的名称以以双引号()括起来来了。例如,下面的语语句创建一个个名为 emmployeee(小写)的的表,该表的的列定义与表表 EMPLLOYEE(大大写)是一样样的。CREATEE TABLLE emmployeee LIIKE emmployeee别名 别名(aliaas) 是指指一个已有的的表、视图的的另一个名称称,也叫昵称称(nickkname)。
3、别别名也可以作作为另一个别别名的昵称。与与这些对象一一样,别名也也可以被创建建或删除,可可以有与之相相关的注释。下下面是 CRREATE ALIASS 语句的一一些例子:CREATEE ALIAAS aliiastabb1 FORR tab11;CREATEE ALIAAS bobb.aliaastab11 FOR tom.ttab1;CREATEE SYNOONYM bbob.alliastaab2 FOOR bobb.aliaastab11;可以看到,CRREATE ALIASS 语句比较较简单。可以以在源对象所所在的同一模模式中创建别别名(如第 1 行),或或者也可以全全限定别名(如如第
4、 2 行行)。为了与与 DB2 for zzSeriees 兼容,使使用关键字 SYNONNYM 代替替 ALIAAS 也是合合法的(如第第 3 行)。使用别名时无需需专门的授权权或权限。不不过,需要获获得与别名所所引用的底层层对象相关的的授权。关于于数据库对象象权限的完整整清单,请参参考 DB22 DBA 认证教程 Serveer mannagemeent(请参参阅 参考资资料)。前面已提到,我我们也可以为为 昵称 创创建别名。昵昵称是引用位位于联邦系统统上的数据表表或视图的数数据库对象。联联邦数据库支支持超出了本本教程的范围围。在本教程程系列的第 2 部分,DData mmanipuula
5、tioon ,我们们将学习更多多有关联邦系系统的知识。要为别名添加注注释,可以发发出以下语句句:COMMENNT ON aliasstab1 IS MMy firrst allias oon tabb1要删除一个别名名,使用 DDROP 语语句,这与所所有其他数据据库对象是一一样的:DROP AALIAS aliasstab1序列对象 序列(sequuence)是是一种数据库库对象,这种种对象允许自自动生成值。序序列对象与标标识列(iddentitty collumn)不不同,标识列列是要与一个个特定的表绑绑在一起的,而而序列是一种种全局的、独独立的对象,同同一个数据库库中的任何表表都可以使用
6、用它。标识列是序列对对象的一种特特例。因此,标标识列的特征征也适用于序序列对象。下下面就例释了了一条 CRREATE SEQUEENCE 语语句:CREATEE SEQUUENCE myseqq AS IINTEGEER STTART WWITH 3360 INNCREMEENT BYY 10 NOO MAXVVALUE CYYCLE CAACHE 220 任何包括 0 在内的数字字数据类型都都可用于序列列值。这些类类型包括 SSMALLIINT、INNTEGERR、BIGIINT 或 DECIMMAL。基于于这些数据类类型的任何用用户定义独特特类型(diistincct typpe)也都可可
7、以用于序列列值。这进一一步扩展了用用户定义独特特类型在应用用程序中的使使用。 如上面的例子所所示,您可以以为序列对象象指定起始值值,从而自定定义序列对象象。在这个例例子中,序列列的第一个值值是 3600。后续值的的生成是由 INCREEMENT BY 子句句控制的。这这里还支持正正、负常量,以以产生升序和和降序值。 缺省情况下,一一个序列所生生成的最小值值和最大值是是由该序列数数据类型的取取值范围来界界定的。例如如,INTEEGER 类类型的序列值值必须处在 -2,1447,4833,647 到 2,1147,4883,6477 之间的范范围内。在 DB2 SSQL Reeferennce G
8、uuide 中中可以找到所所有数字数据据类型的取值值范围。为了了改变这种缺缺省行为,可可以使用 MMINVALLUE 和 MAXVAALUE 选选项来为生成成的值设置一一个边界。如如果达到了最最小值或最大大值,那么可可以使用另一一个选项,即即 CYCLLE 或 NNO CYCCLE 来规规定序列值是是否应该循环环。注意,如如果 CYCCLE 生效效,则序列就就可以生成重重复的值。CACHE 选选项允许 DDB2 将一一些预先分配配好空间的值值保留在内存存中,以提高高性能。CAACHE 220 是缺省省的行为。关关于这个选项项有一点要谨谨记:如果在在所有缓存的的值被使用之之前关闭 DDB2,那么
9、么任何缓存的的值和未使用用的值都将被被丢弃。当 DB2 重重新启动时,又又会生成和缓缓存下一块的的值,从而造造成值之间的的不连续,即即值之间存在在间隔。如果果应用程序不不允许值之间间有间隔,可可以考虑使用用 NOCAACHE 选选项。如果没有使用缓缓存,则性能能就会下降,因因为要频繁地地生成序列数数字。每当生生成一个新值值的时候,都都会写下一条条日志记录。因因此,更高效效的做法是根根据请求来获获取值,并将将这些值缓存存在内存中。通过 ALTEER SEQQUENCEE 语句,可可以更改序列列对象的特征征。除了序列列值的数据类类型以外,上上面所讨论的的所有的设置置都可以修改改。要获得完完整的语法
10、,请请参考 DBB2 SQLL Refeerencee Guidde (请参参阅 参考资资料)。删除一个序列对对象与删除任任何其他的数数据库对象是是一样的,不不同之处是这这里还要使用用到一个 RRESTRIICT 关键键字。这样可可以防止在有有依赖的情况况下删除序列列。DROP SEEQUENCCE mysseq REESTRICCT生成和获取序列列值 序列是一种数据据库对象,因因此对序列的的访问也是由由权限来控制制的。缺省情情况下,只有有序列的创建建者,即 SSYSADMM 和 DBBADM 拥拥有该对象的的 USAGGE 权限。如如果希望其他他用户也能够够使用序列,则则需要使用下下面的语句
11、:GRANT UUSAGE ON SEEQUENCCE seqq_objeect_naame TOO PUBLLIC有两种表达式可可用于生成和和获取序列值值。NEXTTVAL FFOR seeq-namme 用于获获取下一个序序列值,而 PREVVVAL FOOR seqq-namee 则用于获获取上一个生生成的序列值值。下面的例例子例释了这这些表达式的的使用。INSERT INTO t1 VAALUES (NEXTTVAL FFOR myyseq, BOB);INSERT INTO t1 VAALUES (NEXTTVAL FFOR myyseq, PAT);COMMIT;INSERT IN
12、TO t1 VAALUES (NEXTTVAL FFOR myyseq, GENEE);ROLLBACCK;INSERT INTO t1 VAALUES (NEXTTVAL FFOR myyseq, PAULL);VALUES PREVVVAL FOOR mysseq INNTO :hhostvaar假设我们以一个个空表 t11 开始,mmyseq 的下一个序序列值是 11。如果禁用用了 auttocommmit,则在在执行上述语语句之后,tt1 将包含含下面几行:1NAME-1BOB2PAT4PAUL 3 recoord(s) seleected.虽然为 GENNE 生成的的值被回滚了了,但
13、是 DDB2 并没没有再次使用用它。因而,下下一个为 PPAUL 生生成的序列值值就是 4,而而不是 3。 这个例子中的最最后一条语句句展示了如何何使用 PRREVVALL 表达式。宿宿主变量 :hostvvar 存储储当前会话中中生成的最后后一个值。如如果想保存前前面生成的值值,那么应该该在生成下一一个值之前保保存 PREEVVAL 值。临时表 顾名思义,临时时表(temmporarry tabble)不是是永久性的数数据库对象。临临时表与普通通的表在行为为上是一样的的,不同之处处是,并非所所有的功能和和选项都是受受支持的和/或是必需的的。临时表只只能维持在一一次连接期间间。当连接关关闭时,
14、在此此连接内声明明的所有临时时表都将自动动删除掉。 只有声明临时表表的会话或应应用程序才能能访问临时表表。如果两个个应用程序用用相同的名字字创建了一个个临时表,该该临时表的每每个实例仍然然是惟一的。因因而,完全不不必担心出现现临时数据冲冲突的情况。由由于临时表只只允许单连接接(singgle-coonnecttion)访访问,因此这这里无需使用用锁。这正是是临时表的一一个主要的性性能优势。声明临时表 要声明一个临时时表,必须存存在一个 UUSER 临临时表空间(不不同于 SYYSTEM 临时表空间间),用以存存储临时表的的定义和内容容。SYSTTEM 临时时表空间只是是 DB2 在内部用来来执
15、行诸如排排序之类操作作的。下面这这条简单的语语句将创建一一个用户临时时表空间。CREATE USER TEMPOORARY TABLEESPACEE userrtempsspace MANAGEED BY SYSTEEM USIING (userttempsppace)声明全局临时表表时,可以使使用很多可选选子句。下面面的例子对这这些子句的特特性作了说明明。DECLAREE GLOBBAL TEEMPORAARY TAABLE tt_deptt ( deptiid CHAAR(6), deptnname CCHAR(220) )ON COMMMIT DEELETE ROWS NOT LOGGG
16、EDIN userrtempsspace在这个例子中,声声明了临时表表 t_deept,这个个表有两列。OON COMMMIT DDELETEE ROWSS 子句规定定在每次执行行 COMMMIT 操作作时删除临时时表的内容。在在 DB2 V8 中,可可以选择记录录对临时表的的更改,以便便回滚。这个个例子规定对对该表的更改改是 NOTT LOGGGED。这意意味着对该表表的任何操作作,包括创建建以及更改,都都不做日志记记录。如果在在一个工作单单位内创建表表,然后回滚滚,则临时表表将被删除。另另一方面,如如果在此工作作单位内删除除该表,则该该表在恢复时时将没有任何何行。无需使用 INN 子句来指
17、指定该临时表表将要使用的的用户临时表表空间。如果果没有指定该该信息,DBB2 就会搜搜索最适用的的表空间。如如果找不到用用户临时表空空间,DB22 将产生一一个错误。让我们看看另一一个例子:DECLAREE GLOBBAL TEEMPORAARY TAABLE tt_projj LIKKE prooject ON COMMIIT PREESERVEE ROWSS WITTH REPPLACE IN userttempsppace临时表 t_pproj 是是用 LIKKE 关键字字声明的,因因此它拥有与与名为 prrojectt 的持久表表或视图相同同的列定义。OON COMMMIT PPRES
18、ERRVE ROOWS 子句句表明,在执执行 COMMMIT 语语句时,该临临时表中的所所有行都将被被保留。因此此,这些行就就可以在下一一次事务中用用于进一步的的处理。在同一次会话中中使用相同的的名称声明另另一个临时表表之前,首先先必须删除该该临时表。可可以显式地删删除该表,也也可以像这里里一样使用 WITH REPLAACE 选项项。如果使用用了 WITTH REPPLACE 选项,DBB2 将隐式式地删除所有有数据,删除除该临时表,并并用新的定义义重新创建该该临时表。如果使用了 连连接池(coonnecttion ppoolinng),WIITH REEPLACEE 选项用起起来就十分方方
19、便了。连接接池是用于重重用数据库连连接的一种机机制,这样就就不必完全按按照要求分配配和回收资源源。这些操作作的开销都是是相当大的,尤尤其是在有大大量执行很短短事务的连接接时,更是如如此。由于没没有释放连接接,先前使用用的临时表就就可能得不到到清除。下一一个使用该连连接的应用程程序就可能使使用上一次执执行时遗留下下来的数据。因因此,使用 WITH REPLAACE 选项项可以保证用用新的定义刷刷新所声明的的临时表。模式与数据库对对象 大多数数据库对对象都是用一一个 模式(sschemaa) 和一个个 对象名(oobjectt namee)标识的。数数据库模式为为数据库对象象提供逻辑上上的分类。下
20、下面例释了这这种分为两部部分的对象名名:DB2ADMIIN.EMPPLOYEEEHRPROD.AUDITT_VIEWWHRPROD.AUDITT_TRIGG如果在访问数据据库对象时没没有指定模式式,则用于建建立数据库连连接的用户 ID 将被被设为缺省的的模式。例如如,如果用户户 db2aadmin 连接到一个个数据库,并并创建表 TT1,则 DDB2 将创创建一个名为为 db2aadmin.T1 的表表。此后所有有引用非全限限定(unqqualiffied)表表名 T1 的 SQLL 语句都解解析为 dbb2admiin.T1。DB2 专用寄寄存器:CUURRENTT SCHEEMA 您在进行
21、自己的的数据库工作作时可能已经经发现,用同同为对象的模模式的用户 ID 连接接到一个数据据库并非总是是可行的。而而硬编码(hhard-ccodingg)应用程序序以完全限定定对象也不是是最好的解决决办法。幸运运的是,DBB2 允许使使用 SETT CURRRENT SSCHEMAA 命令更改改当前模式。缺缺省情况下,CCURRENNT SCHHEMA DDB2 专用用寄存器被设设置为连接到到数据库的 USER。如如果更改 CCURRENNT SCHHEMA,那那么任何非全全限定的数据据库对象都会会在前面加上上新的值。当前模式可以通通过下面这个个命令获得:VALUES CURREENT SCCH
22、EMA要对它进行更改改,只需使用用下面的命令令:SET SCHHEMA=ddb2admminDB2应用程序序开发数据库库对象例程 在本节中,我们们将介绍更多多类型的数据据库对象。这这些对象统统统都叫做 例例程(rouutine)。从从功能上分,主主要有三种例例程:存储过过程(stoored pproceddure)、函函数(funnctionn)和方法(mmethodd)。(要了了解这些类型型之间的更多多不同之处,请请参阅 存储储过程、函数数和方法。)例程是封装了与与某一特定任任务相关的编编程和数据库库逻辑的数据据库对象。有有效地使用例例程可以简化化应用程序的的代码,并增增加代码的可可重用性。
23、例例如,如果将将某种业务逻逻辑封装在一一个例程中,那那么对此业务务规则的更改改只会影响那那个特定的例例程。从而可可最小化对应应用程序的更更改。例程是在数据库库服务器上定定义和处理的的。这样就允允许应用程序序利用数据库库服务器的能能力,从而减减少客户机上上的处理负载载。通常,复杂的业业务逻辑需要要多条 SQQL 语句。这这些语句要分分别地从客户户机发送到服服务器,如果果数据库活动动很多,就会会产生大量的的网络传输。如如果将这些操操作放在一个个例程中,那那么客户机和和服务器之间间的网络传输输就会大大减减少,从而可可以提高应用用程序的总体体性能。加强安全的能力力是使用例程程的另一个关关键优势。例例程
24、可用于屏屏蔽对底层数数据库对象的的直接访问。用用 EXECCUTE 权权限调用一个个例程就足够够了,无需拥拥有访问底层层数据库对象象的显式的权权限。例程的不同实现现 例程有几种可能能的实现:内置(buillt-in)例例程是 DBB2 系统附附带的。这些些例程定义在在一个系统模模式中,例如如 SYSIIBM、SYYSPROCC、SYSFFUN 和 SYSTOOOLS。 Sourcedd 例程只适适用于函数。ssourceed 例程复复制另一个函函数的语义。 外部(exteernal)例例程是用一种种外部的编程程语言实现的的。对于 DDB2 V88.1,可以以用下列受支支持的语言开开发例程: J
25、ava 语言言 C/C+ OLE(仅用于于存储过程) OLE DB(仅仅用于表函数数) SQL 例程是是用 SQLL Procceduraal Lannguagee (SQLL PL)实实现的。DBB2 SQLL PL 是是 SQL Persiistentt Storred Mooduless (SQLL/PSM) 语言标准准的一个子集集。该标准是是与 SQLL 一起用来来编写存储过过程、函数和和方法的结构构化编程语言言的基础。它它将 SQLL 数据访问问的容易性与与简单编程语语言的流控制制结构相结合合。这就是 SQL PPL 如此流流行的一个主主要原因。存储过程、函数数和方法 存储过程 是一
26、一种数据库对对象,它包含含用于访问和和修改一个或或多个表中数数据的专门程程序。在一个个存储过程内内,可以以一一定的流逻辑辑包装多条 SQL 语语句。存储过过程可以作为为对客户机应应用程序或其其他例程的子子例程扩展。存存储过程的执执行和管理是是由一个关系系数据库管理理系统(RDDBMS)控控制的。函数 是可以自自定义的 SSQL 扩展展。可以在 SQL 语语句(例如一一个 sellect-llist 或或 FROMM 子句)中中调用函数。有有四种类型的的函数:聚合合(aggrregatee)函数、标标量(scaalar)函函数、行(rrow)函数数以及 表(ttable)函函数。 存储过程通常用
27、用于封装复杂杂的应用程序序逻辑,以及及执行开销较较大的数据库库操作,例如如多表联结和和游标操作。而而函数 尤其是 SQL 函函数 通常包包含更简单的的操作。编写写在 SQLL 函数中的的语句将展开开到引用它们们的 SQLL 语句中,与与这些 SQQL 语句一一起执行。这这导致这些语语句在执行时时动态编译。如如果一条 SSQL 语句句中使用了一一个复杂的 SQL 函函数,则 DDB2 要求求使用附加的的资源来编译译它,并生成成一个数据访访问计划。这这样将影响整整个运行时性性能。 方法 用于封装装为结构类型型提供行为的的逻辑,结构构类型包含一一个或多个指指定的属性,各各属性有其自自己的数据类类型。
28、DB2 专用寄寄存器:CUURRENTT PATHH 与大多数 DBB2 数据库库对象一样,一一个完整的例例程名由一个个模式和一个个例程名组成成。 DB22 专用寄存存器 CURRRENT SCHEMMA可以为大大多数数据库库对象解析模模式,但不能能为例程解析析模式。相反反,DB2 是使用 CCURRENNT PATTH 专用寄寄存器来定位位例程的。通过下面的命令令可以获得 CURREENT PAATH 设置置:VALUES CURREENT PAATH缺省路径包含三三个系统模式式,后面跟有有连接到数据据库的当前用用户。例如:SYSIBMM,SYYSFUN,SYSSPROC,DB22ADMIN
29、N下面是一些例子子和技巧,您您可以用它们们来更新 PPATH:SET PATTH=CURRRENT PATH,USERR2VALUES CURREENT PAATH-SYSIBMM,SYYSFUN,SYSSPROC,DB22ADMINN,USSER21 recorrd(s) seleccted.嵌入式 SQLL 程序嵌入式 SQLL 简介 DB2 为开发发人员提供了了不同的编程程方法来编写写应用程序。最最直接的一种种方法是嵌入入式 SQLL 编程。这这种编程方法法是 直接的的,因为程序序嵌入了直接接与 DB22 交互的 SQL 语语句。程序可可以用下列受受支持的编程程语言中的任任何一种来编编写
30、:C/C+ FORTRANN COBOL Java 语言言 (SQLLJ) 如何构造嵌入式式 SQL 语句取决于于所选择的编编程语言。CC/C+ 和 FORRTRAN 中的嵌入式式 SQL 语句前面要要加上 EXXEC SQQL 关键字字:EXEC SQQL SELLECT llastnaame,emmpid IINTO :hostvvar1, :hosttvar2 FROM eemployyee WHHERE ddeptnoo=OPEERATIOONS;COBOL 中中的嵌入式 SQL 语语句非常类似似于 C/CC+ 中的的那些嵌入式式 SQL 语句,不同同的是在语句句的后面要使使用 END
31、D-EXECC 关键字:EXEC SQQL SELLECT llastnaame,emmpid IINTO :hostvvar1, :hosttvar2 FFROM eemployyee WHHERE ddeptnoo=OPEERATIOONS EEND-EXXEC;Java 语言言中的嵌入式式 SQL 语句与前面面两个例子中中展示的那些些嵌入式 SSQL 语句句稍微有些不不同,这里必必须指定语句句将来执行时时所在的连接接上下文。下下面是一个例例子:#sql mmyConnnCtx SELEECT laastnamme, emmpid IINTO :hostvvar1, :hosttvar2
32、FRROM emmployeee WHEERE deeptno=OPERRATIONNS;为了让您更好地地了解嵌入式式 SQL 语句是什么么样子的,下下面给出了用用 C 编写写的一个程序序的代码片断断。在本系列列(请参阅 参考资料)的的第 3 篇篇教程中,您您将了解到更更多关于程序序预编译和实实际代码开发发的知识。int TbBBasic(void) int rrc = 00; strucct sqllca sqqlca; EXEC SQL BBEGIN DECLAARE SEECTIONN; chaar hosstVarSStmt550; EXEEC SQLL END DECLAARE SE
33、ECTIONN; /* deelcaree curssor */ EXEC SQL DDECLARRE c1 CURSOOR FORR SELLECT ddeptnuumb, ddeptnaame FRROM orrg WHEERE deeptnummb = 440; /* oppen cuursor */ EXEC SQL OOPEN cc1; /* feetch ccursorr */ EXEC SQL FFETCH c1 INNTO :ddeptnuumb, :deptnname; whilee (sqllca.sqqlcodee != 1100) priintf( %8d %-14sn
34、n, deeptnummb, deeptnamme); EXEEC SQLL FETCCH c1 INTO :depttnumb, :depptnamee; /* cllose ccursorr */ EXEC SQL CCLOSE c1; /* prreparee the stateement */ strcppy(hosstVarSStmt, DELEETE FRROM orrg WHEERE deeptnummb = 115); EXEC SQL PPREPARRE Stmmt FROOM :hoostVarrStmt; /* exxecutee the stateement */ EX
35、EC SQL EEXECUTTE Stmmt; /* ROOLLBACCK thee trannsactiion */ EXEC SQL RROLLBAACK; returrn 0;静态 SQL 在前一小节中,我我们演示了两两种不同类型型的嵌入式 SQL 语语句:静态嵌嵌入式 SQQL 和动态态嵌入式 SSQL。这个例子中的 SELECCT 语句说说明了静态 SQL 的的使用。编写写静态 SQQL 时,必必须指定完整整的语句。表表名、列名以以及所引用的的数据类型都都是已知的。惟惟一可以在运运行时指定的的信息是使用用宿主变量的的 SQL 语句的 WWHERE 子句中的值值。编译静态 SQQL 语
36、句(或或者,用 DDB2 术语语更确切地说说,准备好的的(preppared)SSQL 语句句)时,将为为其生成数据据访问计划,并并存储在数据据库中的一个个包里面。当当调用包含该该语句的应用用程序时,这这个包将被执执行。由于在在运行时不需需要编译语句句,因此执行行静态 SQQL 时没用用编译开销。在准备语句时,DDB2 使用用数据库统计计信息和配置置参数来估计计和获得访问问计划。如果果数据库统计计信息有变化化,则预先生生成的访问计计划可能不如如一开始生成成时那样是最最佳的。创建包和将包与与数据库绑定定时,要对准准备静态 SSQL 语句句的人进行授授权。只要执执行包的人拥拥有包的 EEXECUT
37、TE 权限,他他就不需要具具备该包中所所引用的数据据库对象上的的显式的权限限。动态 SQL 动态(Dynaamic SSQL) 语语句是在运行行时动态处理理的。语句的的结构直到执执行应用程序序时才需要。注意,嵌入式 SQL 简简介 中展示示的例子 SSQL 语句句使用动态 SQL 来来 PREPPARE 和和 EXECCUTE 一一条 DELLETE 语语句。DELLETE 语语句的文本存存储在一个宿宿主变量 hhostVaarStmtt 中。当该该语句 PRREPAREE 好后,系系统将生成该该语句的一个个可执行格式式,并将其存存储在数据库库中的一个包包里面。一旦旦生成了数据据访问计划,准准
38、备好的语句句就可以 EEXECUTTE 了。听听起来好像有有点熟悉,不不是吗?是的的:这两个处处理阶段与静静态 SQLL 语句正好好是一样的。惟惟一的不同点点是,动态 SQL 的的 PREPPARE 和和 EXECCUTE 都都是在运行时时进行,而静静态 SQLL 在预编译译时准备访问问计划,并将将其保存在数数据库中。动态 SQL 语句必须总总是在执行之之前准备好,不不管是否有相相同的语句(相相同的访问计计划)一次又又一次地重复复使用。为了了最小化这些些准备工作的的开销,DBB2 提供了了 包缓存(也也叫 动态查查询缓存),用用以将经常使使用的访问计计划保存在内内存中。包缓缓存(pacckag
39、e cachee)明显地减减少了重复的的 SQL 准备请求的的代价,然而而发起和响应应准备请求的的开销仍然存存在。在准备语句时,总总是使用当前前数据库统计计信息。因此此,就可以生生成最佳的数数据访问路径径。SQL 语句的的授权是在运运行时决定的的。执行应用用程序的人必必须有适当的的权限来访问问语句中所引引用的数据库库对象。下一一小节将更详详细地讨论 DB2 权权限。安全考虑 要预编译嵌入式式静态 SQQL 程序,用用户需要程序序中所引用数数据库对象的的显式的权限限。由于预编编译或 PRREPAREE 阶段会生生成一个包,并并将其存储在在数据库中,因因此该用户还还必须拥有 BINDAADD 权限
40、限,以便添加加新的包到数数据库中。为为了执行带有有静态 SQQL 的程序序,用户只需需具有相关包包上的 EXXECUTEE 权限。编译嵌入式动态态 SQL 程序的用户户也需要 BBINDADDD 权限。这这里不再需求求其他的权限限,因为动态态 SQL 不是在编译译时准备的。在在程序执行时时,用户需要要所有必需的的权限来发出出每条 SQQL 语句,同同时还需要为为嵌入式 SSQL 程序序创建的包上上的 EXEECUTE 权限。下面的表总结了了预编译和执执行一个只有有静态 SQQL 或只有有动态 SQQL 的程序序所需的权限限。 静态 SQL 与动态 SSQL在下面的表中,让让我们总结并并详细阐述
41、我我们所学到的的关于静态 SQL 和和动态 SQQL 的知识识:基于驱动程序的的 API基于驱动程序的的 API虽然大多数供应应商都支持嵌嵌入式 SQQL 数据库库访问,但如如果您想要使使用同样的源源代码,并将将嵌入式 SSQL 应用用程序部署到到多个数据库库系统上,那那么还需要一一个额外的工工作。必须用用不同供应商商的特定的预预编译器预编编译程序。还还必须生成数数据访问计划划,并绑定到到目标数据库库。为了增加加应用程序的的可移植性,还还应考虑使用用本节介绍的的 基于驱动动程序的解决决方案。基于驱动程序的的解决方案需需要一个驱动动程序管理器器(drivver maanagerr),这是与与应用
42、程序打打交道的界面面。驱动程序序管理器提供供了一套工业业标准的应用用程序编程接接口(APII),用于访访问数据源。应应用程序调用用这些 APPI,然后被被编译,再与与管理器的库库链接。因为为驱动程序遵遵从标准,所所以应用程序序可以很容易易地使用(或或装载)正确确的驱动程序序来访问不同同供应商的数数据源。 在下面几小节中中,我们将看看看 DB22 支持的一一些 APII。在本系列列后面的教程程中,您将更更详细地了解解这些 APPI。CLI 和 OODBC AAPI DB2 Calll Levvel Innterfaace (CCLI) 是是 IBM 对 DB22 数据库服服务器的可调调用 SQL
43、L 接口。CCLI 是用用于数据访问问的一个 CC/C+ 应用程序编编程接口(AAPI)。您您可以使用 DB2 CCLI 开发发动态应用程程序,就像使使用嵌入式动动态 SQLL 语句进行行开发一样。在在这两种情况况下,SQLL 语句都是是在运行时准准备和处理的的。嵌入式动动态 SQLL 要求有一一个预编译器器,而 DBB2 CLII 则没有这这种要求。您您只需编译应应用程序,并并与 DB22 CLI 驱动程序库库链接。DB2 CLII 是基于 Microosoft Open Databbase CConnecctivitty (ODDBC) 和和 X/Oppen CLLI 标准的的。在 ODD
44、BC 环境境中,应用程程序与数据库库服务器之间间的联系要通通过 ODBBC 驱动程程序管理器。该该管理器动态态地加载应用用程序需连接接的数据库服服务器所需的的驱动程序。OODBC 提提供某些级别别的功能支持持,当前的 DB2 CCLI 遵从从 ODBCC 3.511。要开发 DB22 CLI 应用程序,需需要 DB22 Appllicatiion Deeveloppment Cliennt。它包括括编译和链接接 CLI 应用程序时时所有必需的的头文件和库库。而要开发发 ODBCC 应用程序序,则需要 Microosoft 提供的一个个 ODBCC Deveeloperrs Sooftwarre
45、 Kitt。下面的图对 DDB2 CLLI 与 OODBC 环环境作了快速速的比较。OLE DB 与 ADOO.NET API Microsooft Obbject Link Embeddded DDatabaase (OOLE DBB) 是一套套接口,它为为应用程序提提供了对存储储在不同信息息源上的数据据的统一访问问,这些不同同的信息源包包括关系数据据源和非关系系数据源。OOLE DBB 架构由 OLE DDB 提供者者和 OLEE DB 消消费者组成。DDB2 同时时支持这两种种角色。为了了使 DB22 能够充当当 OLE DB 提供供者,必须要要有 IBMM OLE DB Prrovid
46、eer forr DB2。这这是一个本地地驱动程序,支支持通过 OOLE 接口口提取或查询询 DB2 数据。下面的图展示了了一个可作为为 OLE DB 消费费者的 DBB2 数据库库,它可以访访问来自任何何遵从 OLLE DB 的数据源(例例如一个电子子表格)的数数据。同样的的 DB2 服务器也可可以作为一个个 OLE DB 提供供者,为 OOLE DBB 消费者提提供数据。ActiveXX Dataa Objeect .NNET (AADO.NEET) 是 Microosoft 提供的另一一种数据访问问应用程序接接口。它是一一种新的数据据访问模型,将将其前任(AADO)最好好的特性与传传统的
47、数据库库访问相结合合,集成了 XML 支支持,是一种种断开连接的的(discconneccted)数数据架构。有有三种方法从从一个 .NNET 应用用程序连接到到一个 DBB2 数据库库,如下图所所示。 JDBC 和 SQLJ API 至今为止,Jaava 平台台已经享誉多多时,但仍有有很多人正在在致力于扩展展其功能和提提高其性能。访访问和操纵 DB2 的的 Javaa 程序可以以使用 Jaava Daatabasse Connnectiivity (JDBCC) APII,以及 EEmbeddded SQQL forr Javaa (SQLLJ) 标准准。这两个选选项都是供应应商无关的 SQ
48、L 接接口,通过标标准化的 JJava 方方法为应用程程序提供数据据访问。JDBC 是用用于关系数据据库访问的 实际上的 标准 Jaava APPI,这种访访问通过强大大的面向对象象的接口,使使用动态 SSQL。JDDBC 将动动态 SQLL 传递给 DB2 附附带的一个 JDBC 驱动程序。DDB2 通过过 JDBCC API 执行 SQQL 语句,结结果被传回给给 Javaa 代码。JJDBC 类类似于 DBB2 CLII,您无需预预编译或绑定定 JDBCC 程序,因因为 JDBBC 使用动动态 SQLL。而 SQLJ 程序则包含含静态嵌入式式 SQL 语句。准备备一个 SQQLJ 程序序
49、时需要通过过类似于预编编译和绑定的的步骤。在编编译 SQLLJ 源文件件之前,必须须用 SQLLJ 翻译器器对其进行翻翻译,以创建建本地 Jaava 源代代码。完成翻翻译后,需要要使用 DBB2 forr Javaa proffile ccustommizer (db2pprofc) 创建 DDB2 包。DB2 遗留的的基于CLII 的 JDDBC 驱动动程序 根据 Javaa 2 Pllatforrm, Ennterprrise EEditioon (J22EE) 规规范,用于获获得数据访问问的 Javva 方法和和接口可以打打包成 JDDBC 驱动动程序。DBB2 JDBBC 驱动程程序分为遗
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国区块链BaaS平台运营商盈利模式创新研究
- 2026Fast芯片组运营商合作模式与商业模式创新研究报告
- 2026中国小便器产品功能性创新与用户体验提升策略报告
- 2026绵阳汇鑫人力资源服务有限公招聘6人备考题库含答案详解【B卷】
- 中地国际工程有限公司2027届给排水技术员(海外岗)招聘15人笔试题库及参考答案详解(培优B卷)
- 2026湖南常德市临澧县教育局所属事业单位公开选调工作人员126人备考题库【夺分金卷】附答案详解
- 2026人工智能应用开发行业市场现状供应需求分析及投资评估规划研究报告
- 2026民政部所属单位社会招聘23人模拟试卷及参考答案详解(能力提升)
- 2026中国医疗设备行业市场供需分析及投资前景规划分析研究报告
- 临床康复学绪论
- T-CRHA 046-2024 标准手术体位安置技术规范
- 草莓收购协议与草莓苗购销合同
- JTG-QB-003-2003公路桥涵标准图钢筋混凝土盖板涵
- 《电力工程接地用导电防腐涂料技术条件》
- (高清版)DZT 0295-2016 土地质量生态地球化学评价规范
- 意大利古罗马斗兽场课件
- 广东省珠海市九洲中学2024届数学七年级第二学期期末综合测试模拟试题含解析
- 堤防波浪壅高、爬高计算表格
- 教育统计与测量评价新编教程全套教学课件
- 河流动力学课件
- 全2023修订FIDIC白皮书 (2017雇主-咨询工程师服务协议通用条件)
评论
0/150
提交评论