版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、DB2数据据库对象基本数据库库对象 数据库对象象是一个数数据库的构构造块(bbuildding blocck)。DDB2 提提供了不同同类型的数数据库对象象来存储和和表示不同同信息。通通过使用数数据定义语语言(DDDL),可可以创建、修改和删删除数据库库对象。要要操纵数据据库对象,可可以使用数数据操纵语语言(DMML),例例如 SEELECTT、UPDDATE、INSEERT 和和 SELLECT 语句。常常用的数据据库对象有有:表 用户定义数数据类型 约束 视图 索引 除了 Faamilyy Funndameentalls 教程程里介绍的的一些数据据库对象外外,还有一一些其他的的对象,很很多
2、开发人人员在开发发 DB22 应用程程序时会发发现这些对对象比较有有用。本节节我们将介介绍这些对对象。在继续之前前,有一点点要注意:在下面看看到的一些些例子中,对对象名称是是以小写形形式指定的的。无论 DB2 在哪个平平台上运行行,它总是是以大写形形式存储名名称,除非非标识符的的名称以双双引号()括起起来了。例如,下面面的语句创创建一个名名为 emmployyee(小小写)的表表,该表的的列定义与与表 EMMPLOYYEE(大大写)是一一样的。CREAATE TTABLEE emmployyee LIKEE empployeee别名 别名(allias) 是指一个个已有的表表、视图的的另一个名
3、名称,也叫叫昵称(nnicknname)。别名也可可以作为另另一个别名名的昵称。与这些对对象一样,别别名也可以以被创建或或删除,可可以有与之之相关的注注释。下面面是 CRREATEE ALIIAS 语语句的一些些例子:CREAATE AALIASS aliiastaab1 FFOR ttab1;CREAATE AALIASS bobb.aliiastaab1 FFOR ttom.ttab1;CREAATE SSYNONNYM bbob.aaliasstab22 FORR bobb.aliiastaab1;可以看到,CCREATTE ALLIAS 语句比较较简单。可可以在源对对象所在的的同一模式
4、式中创建别别名(如第第 1 行行),或者者也可以全全限定别名名(如第 2 行)。为了与 DB2 for zSerries 兼容,使使用关键字字 SYNNONYMM 代替 ALIAAS 也是是合法的(如如第 3 行)。使用别名时时无需专门门的授权或或权限。不不过,需要要获得与别别名所引用用的底层对对象相关的的授权。关关于数据库库对象权限限的完整清清单,请参参考 DBB2 DBBA 认证证教程 SServeer maanageementt(请参阅阅 参考资资料)。前面已提到到,我们也也可以为 昵称 创创建别名。昵称是引引用位于联联邦系统上上的数据表表或视图的的数据库对对象。联邦邦数据库支支持超出了
5、了本教程的的范围。在在本教程系系列的第 2 部分分,Datta maanipuulatiion ,我我们将学习习更多有关关联邦系统统的知识。要为别名添添加注释,可可以发出以以下语句:COMMMENT ON aaliasstab11 IS My firsst allias on ttab1要删除一个个别名,使使用 DRROP 语语句,这与与所有其他他数据库对对象是一样样的:DROPP ALIIAS aaliasstab11序列对象 序列(seequennce)是是一种数据据库对象,这这种对象允允许自动生生成值。序序列对象与与标识列(iidenttity coluumn)不不同,标识识列是要与与一
6、个特定定的表绑在在一起的,而而序列是一一种全局的的、独立的的对象,同同一个数据据库中的任任何表都可可以使用它它。标识列是序序列对象的的一种特例例。因此,标标识列的特特征也适用用于序列对对象。下面面就例释了了一条 CCREATTE SEEQUENNCE 语语句:CREAATE SSEQUEENCE myseeq ASS INTTEGERR STARRT WIITH 3360 INCRREMENNT BYY 10 NO MMAXVAALUE CYCLLE CACHHE 200 任何包括 0 在内内的数字数数据类型都都可用于序序列值。这这些类型包包括 SMMALLIINT、IINTEGGER、BBI
7、GINNT 或 DECIIMAL。基于这些些数据类型型的任何用用户定义独独特类型(ddistiinct typee)也都可可以用于序序列值。这这进一步扩扩展了用户户定义独特特类型在应应用程序中中的使用。 如上面的例例子所示,您您可以为序序列对象指指定起始值值,从而自自定义序列列对象。在在这个例子子中,序列列的第一个个值是 3360。后后续值的生生成是由 INCRREMENNT BYY 子句控控制的。这这里还支持持正、负常常量,以产产生升序和和降序值。 缺省情况下下,一个序序列所生成成的最小值值和最大值值是由该序序列数据类类型的取值值范围来界界定的。例例如,INNTEGEER 类型型的序列值值必
8、须处在在 -2,147,483,647 到 2,147,483,647 之间的范范围内。在在 DB22 SQLL Refferennce GGuidee 中可以以找到所有有数字数据据类型的取取值范围。为了改变变这种缺省省行为,可可以使用 MINVVALUEE 和 MMAXVAALUE 选项来为为生成的值值设置一个个边界。如如果达到了了最小值或或最大值,那那么可以使使用另一个个选项,即即 CYCCLE 或或 NO CYCLLE 来规规定序列值值是否应该该循环。注注意,如果果 CYCCLE 生生效,则序序列就可以以生成重复复的值。CACHEE 选项允允许 DBB2 将一一些预先分分配好空间间的值保
9、留留在内存中中,以提高高性能。CCACHEE 20 是缺省的的行为。关关于这个选选项有一点点要谨记:如果在所所有缓存的的值被使用用之前关闭闭 DB22,那么任任何缓存的的值和未使使用的值都都将被丢弃弃。当 DDB2 重重新启动时时,又会生生成和缓存存下一块的的值,从而而造成值之之间的不连连续,即值值之间存在在间隔。如如果应用程程序不允许许值之间有有间隔,可可以考虑使使用 NOOCACHHE 选项项。如果没有使使用缓存,则则性能就会会下降,因因为要频繁繁地生成序序列数字。每当生成成一个新值值的时候,都都会写下一一条日志记记录。因此此,更高效效的做法是是根据请求求来获取值值,并将这这些值缓存存在内
10、存中中。通过 ALLTER SEQUUENCEE 语句,可可以更改序序列对象的的特征。除除了序列值值的数据类类型以外,上上面所讨论论的所有的的设置都可可以修改。要获得完完整的语法法,请参考考 DB22 SQLL Refferennce GGuidee (请参参阅 参考考资料)。删除一个序序列对象与与删除任何何其他的数数据库对象象是一样的的,不同之之处是这里里还要使用用到一个 RESTTRICTT 关键字字。这样可可以防止在在有依赖的的情况下删删除序列。DROP SEQUUENCEE mysseq RRESTRRICT生成和获取取序列值 序列是一种种数据库对对象,因此此对序列的的访问也是是由权限
11、来来控制的。缺省情况况下,只有有序列的创创建者,即即 SYSSADM 和 DBBADM 拥有该对对象的 UUSAGEE 权限。如果希望望其他用户户也能够使使用序列,则则需要使用用下面的语语句:GRANTT USAAGE OON SEEQUENNCE sseq_oobjecct_naame TTO PUUBLICC有两种表达达式可用于于生成和获获取序列值值。NEXXTVALL FORR seqq-namme 用于于获取下一一个序列值值,而 PPREVVVAL FFOR sseq-nname 则用于获获取上一个个生成的序序列值。下下面的例子子例释了这这些表达式式的使用。INSERRT INNTO
12、tt1 VAALUESS (NEEXTVAAL FOOR myyseq, BOOB);INSERRT INNTO tt1 VAALUESS (NEEXTVAAL FOOR myyseq, PAAT);COMMIIT;INSERRT INNTO tt1 VAALUESS (NEEXTVAAL FOOR myyseq, GEENE);ROLLBBACK;INSERRT INNTO tt1 VAALUESS (NEEXTVAAL FOOR myyseq, PAAUL);VALUEES PRREVVAAL FOOR myyseq INTOO :hoostvaar假设我们以以一个空表表 t1 开始,mm
13、yseqq 的下一一个序列值值是 1。如果禁用用了 auutocoommitt,则在执执行上述语语句之后,tt1 将包包含下面几几行:1NAMME-1BOBB2PATT4PAUUL 3 reecordd(s) seleectedd.虽然为 GGENE 生成的值值被回滚了了,但是 DB2 并没有再再次使用它它。因而,下下一个为 PAULL 生成的的序列值就就是 4,而而不是 33。 这个例子中中的最后一一条语句展展示了如何何使用 PPREVVVAL 表表达式。宿宿主变量 :hosstvarr 存储当当前会话中中生成的最最后一个值值。如果想想保存前面面生成的值值,那么应应该在生成成下一个值值之前保
14、存存 PREEVVALL 值。临时表 顾名思义,临临时表(ttempooraryy tabble)不不是永久性性的数据库库对象。临临时表与普普通的表在在行为上是是一样的,不不同之处是是,并非所所有的功能能和选项都都是受支持持的和/或或是必需的的。临时表表只能维持持在一次连连接期间。当连接关关闭时,在在此连接内内声明的所所有临时表表都将自动动删除掉。 只有声明临临时表的会会话或应用用程序才能能访问临时时表。如果果两个应用用程序用相相同的名字字创建了一一个临时表表,该临时时表的每个个实例仍然然是惟一的的。因而,完完全不必担担心出现临临时数据冲冲突的情况况。由于临临时表只允允许单连接接(sinngl
15、e-connnectiion)访访问,因此此这里无需需使用锁。这正是临临时表的一一个主要的的性能优势势。声明临时表表 要声明一个个临时表,必必须存在一一个 USSER 临临时表空间间(不同于于 SYSSTEM 临时表空空间),用用以存储临临时表的定定义和内容容。SYSSTEM 临时表空空间只是 DB2 在内部用用来执行诸诸如排序之之类操作的的。下面这这条简单的的语句将创创建一个用用户临时表表空间。CREATTE USSER TTEMPOORARYY TABBLESPPACE userrtemppspacce MANAAGED BY SSYSTEEM USSING (usserteempsppa
16、ce)声明全局临临时表时,可可以使用很很多可选子子句。下面面的例子对对这些子句句的特性作作了说明。DECLAARE GGLOBAAL TEEMPORRARY TABLLE t_deptt ( depptid CHARR(6), depttnamee CHAAR(200) )ON COOMMITT DELLETE ROWSS NOT LLOGGEEDIN usserteempsppace在这个例子子中,声明明了临时表表 t_ddept,这这个表有两两列。ONN COMMMIT DELEETE RROWS 子句规定定在每次执执行 COOMMITT 操作时时删除临时时表的内容容。在 DDB2 VV8
17、 中,可可以选择记记录对临时时表的更改改,以便回回滚。这个个例子规定定对该表的的更改是 NOT LOGGGED。这这意味着对对该表的任任何操作,包包括创建以以及更改,都都不做日志志记录。如如果在一个个工作单位位内创建表表,然后回回滚,则临临时表将被被删除。另另一方面,如如果在此工工作单位内内删除该表表,则该表表在恢复时时将没有任任何行。无需使用 IN 子子句来指定定该临时表表将要使用用的用户临临时表空间间。如果没没有指定该该信息,DDB2 就就会搜索最最适用的表表空间。如如果找不到到用户临时时表空间,DDB2 将将产生一个个错误。让我们看看看另一个例例子:DECLAARE GGLOBAAL T
18、EEMPORRARY TABLLE t_projj LLIKE projject OON COOMMITT PREESERVVE ROOWS WWITH REPLLACE IIN usserteempsppace临时表 tt_prooj 是用用 LIKKE 关键键字声明的的,因此它它拥有与名名为 prrojecct 的持持久表或视视图相同的的列定义。ON CCOMMIIT PRRESERRVE RROWS 子句表明明,在执行行 COMMMIT 语句时,该该临时表中中的所有行行都将被保保留。因此此,这些行行就可以在在下一次事事务中用于于进一步的的处理。在同一次会会话中使用用相同的名名称声明另另一
19、个临时时表之前,首首先必须删删除该临时时表。可以以显式地删删除该表,也也可以像这这里一样使使用 WIITH RREPLAACE 选选项。如果果使用了 WITHH REPPLACEE 选项,DDB2 将将隐式地删删除所有数数据,删除除该临时表表,并用新新的定义重重新创建该该临时表。如果使用了了 连接池池(connnecttion poolling),WWITH REPLLACE 选项用起起来就十分分方便了。连接池是是用于重用用数据库连连接的一种种机制,这这样就不必必完全按照照要求分配配和回收资资源。这些些操作的开开销都是相相当大的,尤尤其是在有有大量执行行很短事务务的连接时时,更是如如此。由于于
20、没有释放放连接,先先前使用的的临时表就就可能得不不到清除。下一个使使用该连接接的应用程程序就可能能使用上一一次执行时时遗留下来来的数据。因此,使使用 WIITH RREPLAACE 选选项可以保保证用新的的定义刷新新所声明的的临时表。模式与数据据库对象 大多数数据据库对象都都是用一个个 模式(sschemma) 和和一个 对对象名(oobjecct naame)标标识的。数数据库模式式为数据库库对象提供供逻辑上的的分类。下下面例释了了这种分为为两部分的的对象名:DB2ADDMIN.EMPLLOYEEEHRPROOD.AUUDIT_VIEWWHRPROOD.AUUDIT_TRIGG如果在访问问数
21、据库对对象时没有有指定模式式,则用于于建立数据据库连接的的用户 IID 将被被设为缺省省的模式。例如,如如果用户 db2aadminn 连接到到一个数据据库,并创创建表 TT1,则 DB2 将创建一一个名为 db2aadminn.T1 的表。此此后所有引引用非全限限定(unnquallifieed)表名名 T1 的 SQQL 语句句都解析为为 db22admiin.T11。DB2 专专用寄存器器:CURRRENTT SCHHEMA 您在进行自自己的数据据库工作时时可能已经经发现,用用同为对象象的模式的的用户 IID 连接接到一个数数据库并非非总是可行行的。而硬硬编码(hhard-codiing
22、)应应用程序以以完全限定定对象也不不是最好的的解决办法法。幸运的的是,DBB2 允许许使用 SSET CCURREENT SSCHEMMA 命令令更改当前前模式。缺缺省情况下下,CURRRENTT SCHHEMA DB2 专用寄存存器被设置置为连接到到数据库的的 USEER。如果果更改 CCURREENT SSCHEMMA,那么么任何非全全限定的数数据库对象象都会在前前面加上新新的值。当前模式可可以通过下下面这个命命令获得:VALUEES CUURRENNT SCCHEMAA要对它进行行更改,只只需使用下下面的命令令:SET SSCHEMMA=dbb2admminDB2应用用程序开发发数据库对
23、对象例程 在本节中,我我们将介绍绍更多类型型的数据库库对象。这这些对象统统统都叫做做 例程(rroutiine)。从功能上上分,主要要有三种例例程:存储储过程(sstoreed prroceddure)、函数(ffuncttion)和和方法(mmethood)。(要要了解这些些类型之间间的更多不不同之处,请请参阅 存存储过程、函数和方方法。)例程是封装装了与某一一特定任务务相关的编编程和数据据库逻辑的的数据库对对象。有效效地使用例例程可以简简化应用程程序的代码码,并增加加代码的可可重用性。例如,如如果将某种种业务逻辑辑封装在一一个例程中中,那么对对此业务规规则的更改改只会影响响那个特定定的例程
24、。从而可最最小化对应应用程序的的更改。例程是在数数据库服务务器上定义义和处理的的。这样就就允许应用用程序利用用数据库服服务器的能能力,从而而减少客户户机上的处处理负载。通常,复杂杂的业务逻逻辑需要多多条 SQQL 语句句。这些语语句要分别别地从客户户机发送到到服务器,如如果数据库库活动很多多,就会产产生大量的的网络传输输。如果将将这些操作作放在一个个例程中,那那么客户机机和服务器器之间的网网络传输就就会大大减减少,从而而可以提高高应用程序序的总体性性能。加强安全的的能力是使使用例程的的另一个关关键优势。例程可用用于屏蔽对对底层数据据库对象的的直接访问问。用 EEXECUUTE 权权限调用一一个
25、例程就就足够了,无无需拥有访访问底层数数据库对象象的显式的的权限。例程的不同同实现 例程有几种种可能的实实现:内置(buuilt-in)例例程是 DDB2 系系统附带的的。这些例例程定义在在一个系统统模式中,例例如 SYYSIBMM、SYSSPROCC、SYSSFUN 和 SYYSTOOOLS。 Sourcced 例例程只适用用于函数。sourrced 例程复制制另一个函函数的语义义。 外部(exxternnal)例例程是用一一种外部的的编程语言言实现的。对于 DDB2 VV8.1,可可以用下列列受支持的的语言开发发例程: Java 语言 C/C+ OLE(仅仅用于存储储过程) OLE DDB
26、(仅用用于表函数数) SQL 例例程是用 SQL Proccedurral LLanguuage (SQLL PL)实实现的。DDB2 SSQL PPL 是 SQL Perssisteent SStoreed Moodulees (SSQL/PPSM) 语言标准准的一个子子集。该标标准是与 SQL 一起用来来编写存储储过程、函函数和方法法的结构化化编程语言言的基础。它将 SSQL 数数据访问的的容易性与与简单编程程语言的流流控制结构构相结合。这就是 SQL PL 如如此流行的的一个主要要原因。存储过程、函数和方方法 存储过程 是一种数数据库对象象,它包含含用于访问问和修改一一个或多个个表中数据
27、据的专门程程序。在一一个存储过过程内,可可以以一定定的流逻辑辑包装多条条 SQLL 语句。存储过程程可以作为为对客户机机应用程序序或其他例例程的子例例程扩展。存储过程程的执行和和管理是由由一个关系系数据库管管理系统(RRDBMSS)控制的的。函数 是可可以自定义义的 SQQL 扩展展。可以在在 SQLL 语句(例例如一个 seleect-llist 或 FRROM 子子句)中调调用函数。有四种类类型的函数数:聚合(aaggreegatee)函数、标量(sscalaar)函数数、行(rrow)函函数以及 表(taable)函函数。 存储过程通通常用于封封装复杂的的应用程序序逻辑,以以及执行开开销
28、较大的的数据库操操作,例如如多表联结结和游标操操作。而函函数 尤其是是 SQLL 函数 通常常包含更简简单的操作作。编写在在 SQLL 函数中中的语句将将展开到引引用它们的的 SQLL 语句中中,与这些些 SQLL 语句一一起执行。这导致这这些语句在在执行时动动态编译。如果一条条 SQLL 语句中中使用了一一个复杂的的 SQLL 函数,则则 DB22 要求使使用附加的的资源来编编译它,并并生成一个个数据访问问计划。这这样将影响响整个运行行时性能。 方法 用于于封装为结结构类型提提供行为的的逻辑,结结构类型包包含一个或或多个指定定的属性,各各属性有其其自己的数数据类型。DB2 专专用寄存器器:C
29、URRRENTT PATTH 与大多数 DB2 数据库对对象一样,一一个完整的的例程名由由一个模式式和一个例例程名组成成。 DBB2 专用用寄存器 CURRRENT SCHEEMA可以以为大多数数数据库对对象解析模模式,但不不能为例程程解析模式式。相反,DDB2 是是使用 CCURREENT PPATH 专用寄存存器来定位位例程的。通过下面的的命令可以以获得 CCURREENT PPATH 设置:VALUEES CUURRENNT PAATH缺省路径包包含三个系系统模式,后后面跟有连连接到数据据库的当前前用户。例例如:SYSIIBM,SYSSFUN,SYYSPROOC,DB2AADMINN下面
30、是一些些例子和技技巧,您可可以用它们们来更新 PATHH:SET PPATH=CURRRENT PATHH,USSER2VALUEES CUURRENNT PAATH-SYSIIBM,SYSSFUN,SYYSPROOC,DB2AADMINN,UUSER221 reccord(s) sseleccted.嵌入式 SSQL 程程序嵌入式 SSQL 简简介 DB2 为为开发人员员提供了不不同的编程程方法来编编写应用程程序。最直直接的一种种方法是嵌嵌入式 SSQL 编编程。这种种编程方法法是 直接接的,因为为程序嵌入入了直接与与 DB22 交互的的 SQLL 语句。程序可以以用下列受受支持的编编程语言
31、中中的任何一一种来编写写:C/C+ FORTRRAN COBOLL Java 语言 (SSQLJ) 如何构造嵌嵌入式 SSQL 语语句取决于于所选择的的编程语言言。C/CC+ 和和 FORRTRANN 中的嵌嵌入式 SSQL 语语句前面要要加上 EEXEC SQL 关键字:EXEC SQL SELEECT llastnname,empiid INNTO :hosttvar11, :hhostvvar2 FROMM empployeee WHHERE depttno=OPERRATIOONS;COBOLL 中的嵌嵌入式 SSQL 语语句非常类类似于 CC/C+ 中的那那些嵌入式式 SQLL 语句
32、,不不同的是在在语句的后后面要使用用 ENDD-EXEEC 关键键字:EXEC SQL SELEECT llastnname,empiid INNTO :hosttvar11, :hhostvvar2 FRROM eemplooyee WHERRE deeptnoo=OPPERATTIONSS ENND-EXXEC;Java 语言中的的嵌入式 SQL 语句与前前面两个例例子中展示示的那些嵌嵌入式 SSQL 语语句稍微有有些不同,这这里必须指指定语句将将来执行时时所在的连连接上下文文。下面是是一个例子子:#sql myCConnCCtx SELLECT lasttnamee, emmpid IN
33、TOO :hoostvaar1, :hosstvarr2 FFROM emplloyeee WHEERE ddeptnno=OOPERAATIONNS;为了让您更更好地了解解嵌入式 SQL 语句是什什么样子的的,下面给给出了用 C 编写写的一个程程序的代码码片断。在在本系列(请请参阅 参参考资料)的的第 3 篇教程中中,您将了了解到更多多关于程序序预编译和和实际代码码开发的知知识。int TTbBassic(vvoid) intt rc = 0; strruct sqlcca sqqlca; EXEEC SQQL BEEGIN DECLLARE SECTTION; cchar hosttVar
34、SStmt50; EEXEC SQL END DECLLARE SECTTION; /* delccare curssor */ EXEEC SQQL DEECLARRE c11 CURRSOR FOR SSELECCT deeptnuumb, depttnamee FROOM orrg WHHERE depttnumbb = 440; /* openn currsor */ EXEEC SQQL OPPEN cc1; /* fetcch cuursorr */ EXEEC SQQL FEETCH c1 IINTO :depptnummb, :depttnamee; whiile (sqlcc
35、a.sqqlcodde != 1000) pprinttf( %8d %-14ssn, depptnummb, ddeptnname); EEXEC SQL FETCCH c11 INTTO :ddeptnnumb, :deeptnaame; /* closse cuursorr */ EXEEC SQQL CLLOSE c1; /* preppare the stattemennt */ strrcpy(hosttVarSStmt, DEELETEE FROOM orrg WHHERE depttnumbb = 115); EXEEC SQQL PRREPARRE Sttmt FFROM :
36、hosstVarrStmtt; /* execcute the stattemennt */ EXEEC SQQL EXXECUTTE Sttmt; /* ROLLLBACKK thee traansacctionn */ EXEEC SQQL ROOLLBAACK; retturn 0;静态 SQQL 在前一小节节中,我们们演示了两两种不同类类型的嵌入入式 SQQL 语句句:静态嵌嵌入式 SSQL 和和动态嵌入入式 SQQL。这个例子中中的 SEELECTT 语句说说明了静态态 SQLL 的使用用。编写静静态 SQQL 时,必必须指定完完整的语句句。表名、列名以及及所引用的的数据类型型都是已
37、知知的。惟一一可以在运运行时指定定的信息是是使用宿主主变量的 SQL 语句的 WHERRE 子句句中的值。编译静态 SQL 语句(或或者,用 DB2 术语更确确切地说,准准备好的(pprepaared)SSQL 语语句)时,将将为其生成成数据访问问计划,并并存储在数数据库中的的一个包里里面。当调调用包含该该语句的应应用程序时时,这个包包将被执行行。由于在在运行时不不需要编译译语句,因因此执行静静态 SQQL 时没没用编译开开销。在准备语句句时,DBB2 使用用数据库统统计信息和和配置参数数来估计和和获得访问问计划。如如果数据库库统计信息息有变化,则则预先生成成的访问计计划可能不不如一开始始生成
38、时那那样是最佳佳的。创建包和将将包与数据据库绑定时时,要对准准备静态 SQL 语句的人人进行授权权。只要执执行包的人人拥有包的的 EXEECUTEE 权限,他他就不需要要具备该包包中所引用用的数据库库对象上的的显式的权权限。动态 SQQL 动态(Dyynamiic SQQL) 语语句是在运运行时动态态处理的。语句的结结构直到执执行应用程程序时才需需要。注意,嵌入入式 SQQL 简介介 中展示示的例子 SQL 语句使用用动态 SSQL 来来 PREEPAREE 和 EEXECUUTE 一一条 DEELETEE 语句。DELEETE 语语句的文本本存储在一一个宿主变变量 hoostVaarStmm
39、t 中。当该语句句 PREEPAREE 好后,系系统将生成成该语句的的一个可执执行格式,并并将其存储储在数据库库中的一个个包里面。一旦生成成了数据访访问计划,准准备好的语语句就可以以 EXEECUTEE 了。听听起来好像像有点熟悉悉,不是吗吗?是的:这两个处处理阶段与与静态 SSQL 语语句正好是是一样的。惟一的不不同点是,动动态 SQQL 的 PREPPARE 和 EXXECUTTE 都是是在运行时时进行,而而静态 SSQL 在在预编译时时准备访问问计划,并并将其保存存在数据库库中。动态 SQQL 语句句必须总是是在执行之之前准备好好,不管是是否有相同同的语句(相相同的访问问计划)一一次又一
40、次次地重复使使用。为了了最小化这这些准备工工作的开销销,DB22 提供了了 包缓存存(也叫 动态查询询缓存),用用以将经常常使用的访访问计划保保存在内存存中。包缓缓存(paackagge caache)明明显地减少少了重复的的 SQLL 准备请请求的代价价,然而发发起和响应应准备请求求的开销仍仍然存在。在准备语句句时,总是是使用当前前数据库统统计信息。因此,就就可以生成成最佳的数数据访问路路径。SQL 语语句的授权权是在运行行时决定的的。执行应应用程序的的人必须有有适当的权权限来访问问语句中所所引用的数数据库对象象。下一小小节将更详详细地讨论论 DB22 权限。安全考虑 要预编译嵌嵌入式静态态
41、 SQLL 程序,用用户需要程程序中所引引用数据库库对象的显显式的权限限。由于预预编译或 PREPPARE 阶段会生生成一个包包,并将其其存储在数数据库中,因因此该用户户还必须拥拥有 BIINDADDD 权限限,以便添添加新的包包到数据库库中。为了了执行带有有静态 SSQL 的的程序,用用户只需具具有相关包包上的 EEXECUUTE 权权限。编译嵌入式式动态 SSQL 程程序的用户户也需要 BINDDADD 权限。这这里不再需需求其他的的权限,因因为动态 SQL 不是在编编译时准备备的。在程程序执行时时,用户需需要所有必必需的权限限来发出每每条 SQQL 语句句,同时还还需要为嵌嵌入式 SSQ
42、L 程程序创建的的包上的 EXECCUTE 权限。下面的表总总结了预编编译和执行行一个只有有静态 SSQL 或或只有动态态 SQLL 的程序序所需的权权限。 静态 SQQL 与动动态 SQQL在下面的表表中,让我我们总结并并详细阐述述我们所学学到的关于于静态 SSQL 和和动态 SSQL 的的知识:基于驱动程程序的 AAPI基于驱动程程序的 AAPI虽然大多数数供应商都都支持嵌入入式 SQQL 数据据库访问,但但如果您想想要使用同同样的源代代码,并将将嵌入式 SQL 应用程序序部署到多多个数据库库系统上,那那么还需要要一个额外外的工作。必须用不不同供应商商的特定的的预编译器器预编译程程序。还必
43、必须生成数数据访问计计划,并绑绑定到目标标数据库。为了增加加应用程序序的可移植植性,还应应考虑使用用本节介绍绍的 基于于驱动程序序的解决方方案。基于驱动程程序的解决决方案需要要一个驱动动程序管理理器(drriverr mannagerr),这是是与应用程程序打交道道的界面。驱动程序序管理器提提供了一套套工业标准准的应用程程序编程接接口(APPI),用用于访问数数据源。应应用程序调调用这些 API,然然后被编译译,再与管管理器的库库链接。因因为驱动程程序遵从标标准,所以以应用程序序可以很容容易地使用用(或装载载)正确的的驱动程序序来访问不不同供应商商的数据源源。 在下面几小小节中,我我们将看看看
44、 DB22 支持的的一些 AAPI。在在本系列后后面的教程程中,您将将更详细地地了解这些些 APII。CLI 和和 ODBBC APPI DB2 CCall Leveel Innterfface (CLII) 是 IBM 对 DBB2 数据据库服务器器的可调用用 SQLL 接口。CLI 是用于数数据访问的的一个 CC/C+ 应用程程序编程接接口(APPI)。您您可以使用用 DB22 CLII 开发动动态应用程程序,就像像使用嵌入入式动态 SQL 语句进行行开发一样样。在这两两种情况下下,SQLL 语句都都是在运行行时准备和和处理的。嵌入式动动态 SQQL 要求求有一个预预编译器,而而 DB22
45、 CLII 则没有有这种要求求。您只需需编译应用用程序,并并与 DBB2 CLLI 驱动动程序库链链接。DB2 CCLI 是是基于 MMicroosoftt Opeen Daatabaase CConneectivvity (ODBBC) 和和 X/OOpen CLI 标准的。在 ODDBC 环环境中,应应用程序与与数据库服服务器之间间的联系要要通过 OODBC 驱动程序序管理器。该管理器器动态地加加载应用程程序需连接接的数据库库服务器所所需的驱动动程序。OODBC 提供某些些级别的功功能支持,当当前的 DDB2 CCLI 遵遵从 ODDBC 33.51。要开发 DDB2 CCLI 应应用程序
46、,需需要 DBB2 Apppliccatioon Deeveloopmennt Cllientt。它包括括编译和链链接 CLLI 应用用程序时所所有必需的的头文件和和库。而要要开发 OODBC 应用程序序,则需要要 Miccrosooft 提提供的一个个 ODBBC Deeveloopers Sooftwaare KKit。下面的图对对 DB22 CLII 与 OODBC 环境作了了快速的比比较。OLE DDB 与 ADO.NET API Microosoftt Objject Linkk Embbeddeed Daatabaase (OLE DB) 是一套接接口,它为为应用程序序提供了对对存
47、储在不不同信息源源上的数据据的统一访访问,这些些不同的信信息源包括括关系数据据源和非关关系数据源源。OLEE DB 架构由 OLE DB 提提供者和 OLE DB 消消费者组成成。DB22 同时支支持这两种种角色。为为了使 DDB2 能能够充当 OLE DB 提提供者,必必须要有 IBM OLE DB PProviider for DB2。这是一个个本地驱动动程序,支支持通过 OLE 接口提取取或查询 DB2 数据。下面的图展展示了一个个可作为 OLE DB 消消费者的 DB2 数据库,它它可以访问问来自任何何遵从 OOLE DDB 的数数据源(例例如一个电电子表格)的的数据。同同样的 DDB
48、2 服服务器也可可以作为一一个 OLLE DBB 提供者者,为 OOLE DDB 消费费者提供数数据。ActivveX DData Objeect .NET (ADOO.NETT) 是 Micrrosofft 提供供的另一种种数据访问问应用程序序接口。它它是一种新新的数据访访问模型,将将其前任(AADO)最最好的特性性与传统的的数据库访访问相结合合,集成了了 XMLL 支持,是是一种断开开连接的(ddiscoonneccted)数数据架构。有三种方方法从一个个 .NEET 应用用程序连接接到一个 DB2 数据库,如如下图所示示。 JDBC 和 SQQLJ AAPI 至今为止,JJava 平台已
49、经经享誉多时时,但仍有有很多人正正在致力于于扩展其功功能和提高高其性能。访问和操操纵 DBB2 的 Javaa 程序可可以使用 Javaa Dattabasse Coonnecctiviity (JDBCC) APPI,以及及 Embbeddeed SQQL foor Jaava (SQLJJ) 标准准。这两个个选项都是是供应商无无关的 SSQL 接接口,通过过标准化的的 Javva 方法法为应用程程序提供数数据访问。JDBC 是用于关关系数据库库访问的 实际上的的 标准 Javaa APII,这种访访问通过强强大的面向向对象的接接口,使用用动态 SSQL。JJDBC 将动态 SQL 传递给
50、DB2 附带的一一个 JDDBC 驱驱动程序。DB2 通过 JJDBC API 执行 SSQL 语语句,结果果被传回给给 Javva 代码码。JDBBC 类似似于 DBB2 CLLI,您无无需预编译译或绑定 JDBCC 程序,因因为 JDDBC 使使用动态 SQL。而 SQLLJ 程序序则包含静静态嵌入式式 SQLL 语句。准备一个个 SQLLJ 程序序时需要通通过类似于于预编译和和绑定的步步骤。在编编译 SQQLJ 源源文件之前前,必须用用 SQLLJ 翻译译器对其进进行翻译,以以创建本地地 Javva 源代代码。完成成翻译后,需需要使用 DB2 for Javaa proofilee cusstomiizer (db22proffc) 创创建 DBB2 包。DB2 遗遗留的基于于CLI 的 JDDBC 驱驱动程序 根据 Jaava 22 Plaatforrm, EEnterrprisse Edditioon (JJ2EE) 规范,用用于获得数数据访问的的 Javva 方法法和接口可可以打包成成 JDBBC 驱动动程序。DDB2 JJDBC 驱
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025理石安全生产管理合同
- 2024新版生物七年级上册-章节知识点总结(人教版)
- 漳州市个人租房合同
- 房屋装修装饰合同
- 周边养殖用地出租合同范例
- 店面转让低价合同范例
- 企业购置合同范例
- 出售民房小院合同范例
- 委托仓库出租合同范例
- 关于医院用工合同范例
- 2024-2030年中国体育培训行业市场发展分析及发展趋势与投资风险预测研究报告
- 圆-解决问题(教学设计)2024-2025学年六年级上册数学人教版
- 2024山东省化工行业职业技能大赛(化工总控工)试题库-下(判断、简答题)
- 历史人教部编版八年级(上册)22.抗日战争的胜利课件(25张)2024版新教材
- 2024年新北师大版七年级上册数学课件 第六章 6.2 第2课时 样本的选取
- 15《搭船的鸟》(教学设计)2024-2025学年统编版语文三年级上册
- 2024至2030年中国传染病医院产业发展动态及未来前景展望报告
- 知识点填空练习-2024-2025学年统编版道德与法治七年级上册
- 学习使用显微镜 2024-2025学年七年级上册生物同步课件(人教版2024)
- 中国近现代史纲要智慧树知到答案2024年北京师范大学等跨校共建
- JGJ7-2010 空间网格结构技术规程
评论
0/150
提交评论