




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、把DB2数据扒库对象叭基本数据库扮对象 鞍数据库对象挨是一个数据把库的构造块颁(buil隘ding 拌block啊)。DB2懊 提供了不巴同类型的数安据库对象来背存储和表示把不同信息。捌通过使用数据定义语言柏(DDL)澳,可以创建把、修改和删班除数据库对霸象。要操纵唉数据库对象懊,可以使用按数据操纵语矮言(DML埃),例如 疤SELEC稗T、UPD百ATE、I邦NSERT芭 和 SE俺LECT 肮语句。常用白的数据库对办象有:暗x。表 瓣用户定义数傲据类型 约束 视图 索引 班除了 Fa吧mily 隘Funda爱menta版ls 教程板里介绍的一扳些数据库对拔象外,还有盎一些其他的霸对象,很多
2、阿开发人员在唉开发 DB绊2 应用程阿序时会发现半这些对象比啊较有用。本叭节我们将介拌绍这些对象搬。八v。柏在继续之前办,有一点要摆注意:在下背面看到的一蔼些例子中,碍对象名称是阿以小写形式哎指定的。无哀论 DB2懊 在哪个平柏台上运行,跋它总是以大扳写形式存储绊名称,除非埃标识符的名白称以双引号哀()括柏起来了。凹R。版例如,下面澳的语句创建邦一个名为 盎emplo哀yee(小澳写)的表,皑该表的列定伴义与表 E鞍MPLOY瓣EE(大写霸)是一样的芭。唉8。懊癌CREAT哎E TAB捌LE e安mploy摆ee L般IKE e拔mploy耙ee柏z。别名 安别名(al背ias) 摆是指一个已
3、暗有的表、视佰图的另一个吧名称,也叫半昵称(ni稗cknam拌e)。别名斑也可以作为柏另一个别名盎的昵称。与澳这些对象一叭样,别名也俺可以被创建碍或删除,可版以有与之相柏关的注释。傲下面是 C肮REATE靶 ALIA半S 语句的坝一些例子:暗d。绊坝CREAT扒E ALI叭AS al暗iasta案b1 FO跋R tab袄1;熬s。扳芭CREAT翱E ALI挨AS bo斑b.ali昂astab暗1 FOR胺 tom.袄tab1;阿S。隘熬CREAT巴E SYN八ONYM 澳bob.a般liast哎ab2 F扮OR bo案b.ali暗astab翱1;安c。俺可以看到,百CREAT癌E ALI癌AS
4、 语句颁比较简单。稗可以在源对伴象所在的同班一模式中创敖建别名(如捌第 1 行艾),或者也澳可以全限定霸别名(如第叭 2 行)肮。为了与 肮DB2 f扒or zS板eries败 兼容,使爸用关键字 把SYNON傲YM 代替般 ALIA瓣S 也是合俺法的(如第摆 3 行)霸。八A。拔使用别名时跋无需专门的背授权或权限稗。不过,需八要获得与别捌名所引用的碍底层对象相颁关的授权。背关于数据库安对象权限的版完整清单,皑请参考 D八B2 DB坝A 认证教板程 Ser颁ver m跋anage哀ment(绊请参阅 参挨考资料)。懊e。胺前面已提到敖,我们也可癌以为 昵称板 创建别名澳。昵称是引捌用位于联邦伴
5、系统上的数稗据表或视图班的数据库对耙象。联邦数隘据库支持超爱出了本教程蔼的范围。在搬本教程系列蔼的第 2 版部分,Da扮ta ma耙nipul袄ation阿 ,我们将哀学习更多有翱关联邦系统的知识。隘M。拜要为别名添办加注释,可翱以发出以下暗语句:澳巴COMME啊NT ON拔 alia挨stab1按 IS 爸My fi矮rst a矮lias 凹on ta昂b1肮r。爸要删除一个搬别名,使用皑 DROP唉 语句,这背与所有其他爸数据库对象拜是一样的:按v。吧板DROP 拜ALIAS爸 alia八stab1序列对象 澳序列(se癌quenc氨e)是一种阿数据库对象敖,这种对象稗允许自动生安成值。序
6、列拔对象与标识半列(ide吧ntity colu爸mn)不同稗,标识列是疤要与一个特拔定的表绑在版一起的,而芭序列是一种霸全局的、独般立的对象,癌同一个数据霸库中的任何唉表都可以使百用它。矮X。隘标识列是序绊列对象的一种特例。因耙此,标识列扒的特征也适巴用于序列对坝象。下面就安例释了一条岸 CREA拔TE SE碍QUENC氨E 语句:熬n。氨蔼CREAT鞍E SEQ熬UENCE myse伴q AS 爱INTEG捌ER傲A。澳邦 S败TART 案WITH 癌360 袄 把半 I叭NCREM吧ENT BY 10爸拌 N胺O MAX坝VALUE霸隘 C唉YCLE哎胺 CACHE 半20 颁任何包括
7、叭0 在内的拔数字数据类蔼型都可用于疤序列值。这敖些类型包括哎 SMAL矮LINT、背INTEG拔ER、BI鞍GINT 暗或 DEC八IMAL。胺基于这些数哎据类型的任搬何用户定义爱独特类型(昂disti瓣nct t般ype)也阿都可以用于澳序列值。这靶进一步扩展拜了用户定义爱独特类型在拜应用程序中疤的使用。 q。罢如上面的例班子所示,您耙可以为序列哀对象指定起蔼始值,从而肮自定义序列柏对象。在这癌个例子中,捌序列的第一哎个值是 3傲60。后续柏值的生成是搬由 INCREMEN败T BY 癌子句控制的凹。这里还支瓣持正、负常矮量,以产生暗升序和降序佰值。 扳3。岸缺省情况下按,一个序列办所生成
8、的最蔼小值和最大暗值是由该序罢列数据类型耙的取值范围版来界定的。蔼例如,IN埃TEGER啊 类型的序岸列值必须处芭在 -2,肮147,4笆83,64稗7 到 2稗,147,巴483,6爱47 之间奥的范围内。耙在 DB2百 SQL 吧Refer凹ence 碍Guide挨 中可以找扮到所有数字扒数据类型的啊取值范围。俺为了改变这爸种缺省行为绊,可以使用罢 MINV瓣ALUE 碍和 MAX叭VALUE澳 选项来为疤生成的值设八置一个边界绊。如果达到捌了最小值或按最大值,那鞍么可以使用罢另一个选项皑,即 CY氨CLE 或把 NO C皑YCLE 隘来规定序列挨值是否应该安循环。注意鞍,如果 C半YCL
9、E 半生效,则序肮列就可以生奥成重复的值败。袄j。班CACHE埃 选项允许隘 DB2 艾将一些预先俺分配好空间澳的值保留在暗内存中,以袄提高性能。埃CACHE斑 20 是俺缺省的行为版。关于这个艾选项有一点癌要谨记:如坝果在所有缓绊存的值被使袄用之前关闭捌 DB2,颁那么任何缓背存的值和未白使用的值都稗将被丢弃。背当 DB2斑 重新启动哎时,又会生坝成和缓存下扒一块的值,艾从而造成值拜之间的不连哎续,即值之巴间存在间隔氨。如果应用柏程序不允许埃值之间有间背隔,可以考八虑使用 N背OCACH岸E 选项。翱o。扮如果没有使瓣用缓存,则奥性能就会下岸降,因为要岸频繁地生成敖序列数字。胺每当生成一扮个
10、新值的时巴候,都会写按下一条日志坝记录。因此扮,更高效的按做法是根据安请求来获取拌值,并将这癌些值缓存在扳内存中。佰J。扒通过 AL败TER S百EQUEN隘CE 语句拔,可以更改败序列对象的爱特征。除了办序列值的数邦据类型以外办,上面所讨靶论的所有的瓣设置都可以袄修改。要获挨得完整的语扮法,请参考熬 DB2 阿SQL R稗efere背nce G扳uide 拌(请参阅 版参考资料)拌。埃W。蔼删除一个序列对象与删颁除任何其他瓣的数据库对矮象是一样的碍,不同之处暗是这里还要肮使用到一个阿 RESTRICT 蔼关键字。这白样可以防止叭在有依赖的敖情况下删除肮序列。伴9。颁DROP 跋SEQUENC
11、E m版yseq 鞍RESTR蔼ICT胺生成和获取霸序列值 搬序列是一种澳数据库对象爸,因此对序哀列的访问也埃是由权限来拌控制的。缺暗省情况下,盎只有序列的胺创建者,即坝 SYSA笆DM 和 DBADM袄 拥有该对艾象的 US盎AGE 权百限。如果希敖望其他用户白也能够使用癌序列,则需盎要使用下面翱的语句:凹W。爸GRANT哎 USAG拌E ON 败SEQUE般NCE s背eq_ob澳ject_耙name 爱TO PU皑BLIC哎U。般有两种表达背式可用于生拜成和获取序巴列值。NE癌XTVAL耙 FOR 版seq-n颁ame 用叭于获取下一扒个序列值,板而 PRE笆VVAL 背FOR s般eq
12、-na疤me 则用绊于获取上一凹个生成的序拌列值。下面斑的例子例释肮了这些表达碍式的使用。哀4。半INSER吧T INT袄O t1 叭VALUE佰S (NE瓣XTVAL哎 FOR 半myseq按, BO昂B);八R。般INSER耙T INT蔼O t1 矮VALUE白S (NEXTVAL扒 FOR 埃myseq蔼, PA巴T);板g。俺COMMI疤T;坝INSER按T INT白O t1 案VALUE盎S (NE霸XTVAL安 FOR 癌myseq靶, GE蔼NE);柏F。八ROLLB背ACK;佰INSER办T INT坝O t1 半VALUE啊S (NE跋XTVAL盎 FOR 扳myseq挨, P
13、A案UL);邦V。斑VALUE百S PRE安VVAL 版FOR m坝yseq 扮INTO 癌:host艾var颁N。袄假设我们以埃一个空表 办t1 开始挨,myse叭q 的下一肮个序列值是爱 1。如果坝禁用了 a隘utoco拜mmit,胺则在执行上耙述语句之后盎,t1 将半包含下面几按行:阿G。案1案皑NAME板-隘-唉肮-八-按1BOB2PAT八4唉岸PAUL半 3 re埃cord(扳s) se爸lecte芭d.班虽然为 G按ENE 生坝成的值被回芭滚了,但是案 DB2 般并没有再次般使用它。因挨而,下一个鞍为 PAU摆L 生成的敖序列值就是摆 4,而不笆是 3。 氨e。颁这个例子中拔的最后
14、一条胺语句展示了敖如何使用 绊PREVV摆AL 表达安式。宿主变氨量 :ho凹stvar捌 存储当前拜会话中生成隘的最后一个百值。如果想按保存前面生捌成的值,那半么应该在生拔成下一个值疤之前保存 扒PREVV哀AL 值。鞍j。临时表 般顾名思义,板临时表(t按empor把ary t疤able)搬不是永久性绊的数据库对芭象。临时表癌与普通的表按在行为上是矮一样的,不邦同之处是,芭并非所有的扮功能和选项扒都是受支持耙的和/或是疤必需的。临把时表只能维啊持在一次连百接期间。当傲连接关闭时按,在此连接皑内声明的所翱有临时表都埃将自动删除肮掉。 奥V。稗只有声明临耙时表的会话扮或应用程序癌才能访问临爱时
15、表。如果癌两个应用程般序用相同的拜名字创建了稗一个临时表盎,该临时表版的每个实例颁仍然是惟一氨的。因而,拔完全不必担百心出现临时疤数据冲突的哎情况。由于白临时表只允捌许单连接(爱singl澳e-con稗necti稗on)访问绊,因此这里白无需使用锁敖。这正是临皑时表的一个凹主要的性能癌优势。把U。矮声明临时表懊 敖要声明一个颁临时表,必吧须存在一个背 USER傲 临时表空袄间(不同于背 SYST癌EM 临时奥表空间),傲用以存储临奥时表的定义斑和内容。S邦YSTEM笆 临时表空柏间只是 D癌B2 在内笆部用来执行办诸如排序之鞍类操作的。吧下面这条简爸单的语句将靶创建一个用班户临时表空傲间。按o
16、。胺CREAT安E USE埃R TEM啊PORA啊RY TA碍BLESP唉ACE u跋serte隘mpspace吧B。按 MANA唉GED B安Y SYS凹TEM U伴SING 啊(use哎rtemp挨space绊)岸1。佰声明全局临挨时表时,可斑以使用很多笆可选子句。捌下面的例子百对这些子句拜的特性作了盎说明。板Z。芭DECLA熬RE GL阿OBAL 笆TEMPO碍RARY 俺TABLE办 t_de拌pt 岸L。哎( dep芭tid C矮HAR(6艾), de巴ptnam半e CHA吧R(20)白 )办z。胺ON CO坝MMIT 叭DELET翱E ROW半S 蔼NOT L稗OGGED扮IN
17、us懊ertem罢pspac霸e翱在这个例子袄中,声明了爱临时表 t败_dept扳,这个表有拜两列。ON靶 COMM坝IT DE八LETE 捌ROWS 肮子句规定在板每次执行 扒COMMI跋T 操作时版删除临时表吧的内容。在蔼 DB2 隘V8 中,耙可以选择记坝录对临时表俺的更改,以罢便回滚。这板个例子规定芭对该表的更啊改是 NO拔T LOG把GED。这斑意味着对该半表的任何操佰作,包括创翱建以及更改岸,都不做日拌志记录。如疤果在一个工作单位内创八建表,然后拌回滚,则临摆时表将被删昂除。另一方翱面,如果在绊此工作单位肮内删除该表邦,则该表在安恢复时将没霸有任何行。把U。靶无需使用 艾IN 子句
18、稗来指定该临盎时表将要使唉用的用户临肮时表空间。熬如果没有指鞍定该信息,靶DB2 就肮会搜索最适扳用的表空间扮。如果找不摆到用户临时翱表空间,D翱B2 将产啊生一个错误败。办1。奥让我们看看爸另一个例子翱:败DECLA板RE GL隘OBAL 案TEMPO鞍RARY 瓣TABLE邦 t_pr挨oj 哎a。岸 L芭IKE p胺rojec岸t班 O败N COM班MIT P把RESER拌VE RO胺WS暗 W隘ITH R拜EPLAC背E巴 I安N use皑rtemp蔼space斑临时表 t扮_proj罢 是用 L柏IKE 关跋键字声明的板,因此它拥敖有与名为 爱proje懊ct 的持斑久表或视图挨相同
19、的列定伴义。ON 伴COMMI盎T PRE巴SERVE邦 ROWS百 子句表明奥,在执行 隘COMMI捌T 语句时埃,该临时表柏中的所有行拌都将被保留邦。因此,这摆些行就可以班在下一次事艾务中用于进白一步的处理。岸A。昂在同一次会扳话中使用相颁同的名称声稗明另一个临隘时表之前,鞍首先必须删氨除该临时表半。可以显式耙地删除该表班,也可以像岸这里一样使熬用 WIT巴H REP盎LACE 拔选项。如果鞍使用了 W袄ITH R肮EPLAC佰E 选项,叭DB2 将蔼隐式地删除唉所有数据,版删除该临时伴表,并用新败的定义重新背创建该临时扳表。板U。矮如果使用了白 连接池(捌conne柏ction敖 poo
20、l白ing),袄WITH 案REPLA翱CE 选项用起来就十百分方便了。案连接池是用般于重用数据败库连接的一挨种机制,这唉样就不必完邦全按照要求班分配和回收坝资源。这些霸操作的开销板都是相当大岸的,尤其是版在有大量执奥行很短事务氨的连接时,案更是如此。埃由于没有释靶放连接,先俺前使用的临袄时表就可能败得不到清除爱。下一个使傲用该连接的氨应用程序就叭可能使用上癌一次执行时搬遗留下来的白数据。因此氨,使用 W霸ITH R隘EPLAC伴E 选项可阿以保证用新昂的定义刷新埃所声明的临氨时表。案S。阿模式与数据搬库对象摆 翱大多数数据败库对象都是唉用一个 模败式(sch百ema) 奥和一个 对啊象名(o
21、b八ject 哎name)拜标识的。数澳据库模式为耙数据库对象提供逻辑上的分类。下案面例释了这俺种分为两部把分的对象名翱:澳F。阿DB2AD败MIN.E捌MPLOY蔼EE办HRPRO凹D.AUD氨IT_VI办EW矮HRPRO隘D.AUD办IT_TR吧IG耙如果在访问暗数据库对象爸时没有指定扒模式,则用挨于建立数据绊库连接的用阿户 ID 爸将被设为缺敖省的模式。柏例如,如果巴用户 db白2admi凹n 连接到翱一个数据库耙,并创建表佰 T1,则 DB2 半将创建一个白名为 db板2admi按n.T1 坝的表。此后疤所有引用非皑全限定(u案nqual颁ified芭)表名 T搬1 的 S芭QL 语句
22、靶都解析为 凹db2ad把min.T颁1。矮q。暗DB2 专胺用寄存器:蔼CU唉RRENT袄 SCHE柏MA瓣 澳您在进行自邦己的数据库埃工作时可能案已经发现,白用同为对象绊的模式的用邦户 ID 叭连接到一个隘数据库并非板总是可行的搬。而硬编码皑(hard熬-codi澳ng)应用扮程序以完全版限定对象也胺不是最好的爱解决办法。昂幸运的是,阿DB2 允案许使用 S奥ET CU搬RRENT班 SCHE叭MA 命令班更改当前模班式。缺省情俺况下,CU霸RRENT哎 SCHE碍MA DB斑2 专用寄拜存器被设置拔为连接到数安据库的 U笆SER。如啊果更改 C罢URREN凹T SCH百EMA,那袄么任何
23、非全氨限定的数据翱库对象都会般在前面加上八新的值。案I。八当前模式可矮以通过下面版这个命令获柏得:捌VALUE叭S CUR扮RENT 奥SCHEM凹A绊要对它进行埃更改,只需败使用下面的班命令:隘SET S翱CHEMA翱=db2a瓣dmin霸DB2应用艾程序开发数翱据库对象例程 靶在本节中,跋我们将介绍俺更多类型的般数据库对象唉。这些对象肮统统都叫做拌 例程(r绊outine)。从功芭能上分,主半要有三种例霸程:存储过隘程(sto碍red p把roced邦ure)、颁函数(fu稗nctio氨n)和方法癌(meth般od)。(暗要了解这些碍类型之间的版更多不同之肮处,请参阅背 存储过程罢、函数和
24、方氨法。)稗9。柏例程是封装澳了与某一特疤定任务相关鞍的编程和数安据库逻辑的昂数据库对象背。有效地使隘用例程可以邦简化应用程靶序的代码,敖并增加代码爸的可重用性耙。例如,如岸果将某种业扒务逻辑封装安在一个例程碍中,那么对氨此业务规则扒的更改只会爸影响那个特昂定的例程。拌从而可最小瓣化对应用程叭序的更改。跋6。案例程是在数耙据库服务器暗上定义和处爸理的。这样跋就允许应用霸程序利用数扒据库服务器伴的能力,从敖而减少客户肮机上的处理扳负载。霸2。爱通常,复杂板的业务逻辑爸需要多条 鞍SQL 语捌句。这些语绊句要分别地翱从客户机发熬送到服务器岸,如果数据暗库活动很多霸,就会产生皑大量的网络百传输。如果
25、疤将这些操作胺放在一个例翱程中,那么鞍客户机和服芭务器之间的奥网络传输就埃会大大减少办,从而可以蔼提高应用程肮序的总体性笆能。扮X。吧加强安全的能力是使用矮例程的另一爱个关键优势胺。例程可用鞍于屏蔽对底白层数据库对爸象的直接访皑问。用 E肮XECUT佰E 权限调傲用一个例程绊就足够了,白无需拥有访颁问底层数据败库对象的显按式的权限。板0。稗例程的不同八实现岸 颁例程有几种搬可能的实现霸:版内置(bu奥ilt-i吧n)例程是耙 DB2 白系统附带的斑。这些例程皑定义在一个办系统模式中澳,例如 S颁YSIBM白、SYSP扳ROC、S爸YSFUN扮 和 SY案STOOL昂S。 袄9。般Sourc氨e
26、d 例程皑只适用于函唉数。sou拔rced 背例程复制另啊一个函数的傲语义。 搬w。唉外部(ex八terna罢l)例程是熬用一种外部芭的编程语言伴实现的。对澳于 DB2氨 V8.1傲,可以用下昂列受支持的袄语言开发例柏程: 捌o。傲Java 扒语言 俺C/C+扳 翱OLE(仅鞍用于存储过按程) 啊OLE D翱B(仅用于芭表函数) 矮SQL 例霸程是用 S挨QL Pr坝ocedu绊ral L澳angua罢ge (S疤QL PL柏)实现的。皑DB2 S翱QL PL般 是 SQ伴L Per般siste凹nt St碍ored 靶Modul瓣es (S佰QL/PS盎M) 语言稗标准的一个矮子集。该标碍准
27、是与 S稗QL 一起凹用来编写存拌储过程、函疤数和方法的矮结构化编程芭语言的基础。它将 S敖QL 数据颁访问的容易爸性与简单编氨程语言的流按控制结构相扳结合。这就版是 SQL搬 PL 如按此流行的一邦个主要原因爸。颁M。俺存储过程、版函数和方法芭 摆存储过程 半是一种数据癌库对象,它扒包含用于访伴问和修改一案个或多个表岸中数据的专捌门程序。在颁一个存储过肮程内,可以奥以一定的流捌逻辑包装多百条 SQL安 语句。存昂储过程可以俺作为对客户盎机应用程序哀或其他例程版的子例程扩安展。存储过白程的执行和挨管理是由一肮个关系数据柏库管理系统皑(RDBM熬S)控制的奥。矮K。埃函数 是可艾以自定义的摆 S
28、QL 爱扩展。可以盎在 SQL奥 语句(例霸如一个 s氨elect昂-list捌 或 FR扳OM 子句版)中调用函柏数。有四种斑类型的函数靶:聚合(a矮ggreg暗ate)函班数、标量(爱scala班r)函数、叭行(row捌)函数以及昂 表(table)函笆数。 佰n。捌存储过程通柏常用于封装办复杂的应用爱程序逻辑,拜以及执行开芭销较大的数安据库操作,八例如多表联霸结和游标操盎作。而函数挨 半佰 尤其是 懊SQL 函爱数 胺敖 通常包含袄更简单的操案作。编写在胺 SQL 拌函数中的语碍句将展开到懊引用它们的扒 SQL 袄语句中,与稗这些 SQ哎L 语句一百起执行。这案导致这些语安句在执行时伴动
29、态编译。挨如果一条 笆SQL 语佰句中使用了板一个复杂的稗 SQL 版函数,则 柏DB2 要办求使用附加盎的资源来编翱译它,并生靶成一个数据把访问计划。芭这样将影响矮整个运行时板性能。 稗a。罢方法 用于捌封装为结构啊类型提供行背为的逻辑,澳结构类型包懊含一个或多绊个指定的属懊性,各属性熬有其自己的矮数据类型。扒p。疤DB2 专埃用寄存器:皑CURRE柏NT PA芭TH阿 捌与大多数 摆DB2 数芭据库对象一佰样,一个完板整的例程名袄由一个模式邦和一个例程瓣名组成。 碍DB2 专奥用寄存器 柏CURRE败NT SC八HEMA可俺以为大多数啊数据库对象靶解析模式,扒但不能为例拜程解析模式跋。相反
30、,D拔B2 是使啊用 CUR跋RENT 啊PATH 懊专用寄存器靶来定位例程跋的。凹n。奥通过下面的矮命令可以获颁得 CUR鞍RENT 肮PATH 袄设置:皑VALUE熬S CUR扳RENT 安PATH绊缺省路径包爸含三个系统翱模式,后面板跟有连接到熬数据库的当疤前用户。例捌如:埃6。蔼SYSI办BM,岸SYSFU拜N,S胺YSPRO矮C,D按B2ADM啊IN翱T。胺下面是一些背例子和技巧版,您可以用佰它们来更新绊 PATH拔:敖SET P伴ATH=C翱URREN暗T PAT耙H,US蔼ER2爱VALUE傲S CUR班RENT 爱PATH癌-巴-耙-办-罢-霸-鞍SYSI拔BM,懊SYSFU埃
31、N,S岸YSPRO俺C,D摆B2ADM唉IN,斑USER2隘阿e。俺1坝 reco版rd(s)霸 sele肮cted.鞍嵌入式 S哎QL 程序把嵌入式 S拜QL 简介懊 凹DB2 为绊开发人员提俺供了不同的凹编程方法来扮编写应用程拔序。最直接伴的一种方法皑是嵌入式 疤SQL 编半程。这种编捌程方法是 巴直接的,因昂为程序嵌入盎了直接与 皑DB2 交霸互的 SQ绊L 语句。般程序可以用安下列受支持安的编程语言靶中的任何一稗种来编写:6。板C/C+爱 疤FORTR艾AN 傲COBOL八 隘Java 拜语言 (S把QLJ) 半如何构造嵌爱入式 SQ败L 语句取版决于所选择按的编程语言盎。C/C+翱+
32、 和 F肮ORTRA傲N 中的嵌吧入式 SQ板L 语句前隘面要加上 奥EXEC 埃SQL 关叭键字:班T。案EXEC 唉SQL S敖ELECT懊 last奥name,埃empid翱 INTO傲 :hos疤tvar1耙, :ho碍stvar矮2 哀i。瓣矮FROM 伴emplo邦yee W稗HERE 艾deptn拔o=OP叭ERATI俺ONS;懊t。霸COBOL矮 中的嵌入澳式 SQL胺 语句非常澳类似于 C把/C+ 邦中的那些嵌癌入式 SQ肮L 语句,癌不同的是在耙语句的后面颁要使用 E挨ND-EX扒EC 关键唉字:哎4。佰EXEC 白SQL S般ELECT艾 last版name,癌empid
33、懊 INTO吧 :hos败tvar1, :hostvar蔼2 袄m。按 矮 昂 FRO奥M emp八loyee敖 WHER唉E dep巴tno=癌OPERA安TIONS绊 END埃-EXEC氨;背p。柏Java 爱语言中的嵌熬入式 SQ坝L 语句与疤前面两个例爱子中展示的矮那些嵌入式伴 SQL 颁语句稍微有熬些不同,这吧里必须指定懊语句将来执挨行时所在的绊连接上下文背。下面是一白个例子:皑8。白#sql 跋myCo靶nnCtx埃 SE跋LECT 跋lastn凹ame, 哎empid扒 INTO拔 :hos稗tvar1矮, :ho跋stvar懊2 斑P。挨 般 矮 敖 把FROM 安emplo按
34、yee W班HERE 鞍deptn扮o=懊OPER盎ATION暗S;耙9。巴为了让您更澳好地了解嵌昂入式 SQ按L 语句是凹什么样子的瓣,下面给出板了用 C 百编写的一个伴程序的代码吧片断。在本蔼系列(请参昂阅 参考资蔼料)的第 巴3 篇教程拌中,您将了坝解到更多关般于程序预编隘译和实际代柏码开发的知瓣识。巴d。胺int T办bBasi案c(voi胺d)隘 int rc =吧 0;罢 str懊uct s傲qlca 笆sqlca敖;斑 EXE绊C SQL稗 BEGI颁N DEC扮LARE 罢SECTI班ON;啊3。翱 c昂har h阿ostVa艾rStmt哎50;翱 E搬XEC S癌QL EN岸
35、D DEC肮L袄ARE S哀ECTIO案N; 拌 /* 败delca耙re cu岸rsor 叭*/白 EXE伴C SQL把 DECL氨ARE c百1 CUR坝SOR F昂OR坝 S胺ELECT艾 dept叭numb,罢 dept熬name 扒FROM 叭org W挨HERE 鞍deptn伴umb =拌 40;颁h。班 /* 伴open 安curso伴r */耙 EXE肮C SQL按 OPEN哎 c1;埃 /* 笆fetch笆 curs岸or */袄 EXE八C SQL坝 FETC癌H c1 疤INTO 板:dept哀numb,盎 :dep芭tname办;矮w。澳 whi坝le (s斑qlca.
36、暗sqlco氨de !=隘 100) 敖 p碍rintf瓣( 摆 %8d 癌%-14sn, 蔼deptn凹umb, 矮deptname);佰6。跋 E埃XEC S埃QL FE疤TCH c伴1 INT碍O :de翱ptnum翱b, :d跋eptna哎me;把j。 /* 隘close靶 curs霸or */跋 EXE佰C SQL扳 CLOS熬E c1; 笆 /* 疤prepa隘re th爸e sta捌temen班t */班 str阿cpy(h绊ostVa跋rStmt叭, DE鞍LETE 柏FROM 碍org W把HER凹E dep绊tnumb阿 = 15柏);袄j。蔼 EXE碍C SQL八 PRE
37、P凹ARE S艾tmt F奥ROM :把hostV俺arStm敖t;挨9。 扮 /* 熬execu凹te the sta胺temen坝t */背 EXE板C SQL埃 EXEC扮UTE S办tmt; 办 /* 懊ROLLB懊ACK t白he tr靶ansac扮tion 捌*/傲 EXE奥C SQL柏 ROLL傲BACK;疤 ret办urn 0搬;唉静态 SQ俺L懊 肮在前一小节盎中,我们演扳示了两种不耙同类型的嵌唉入式 SQ昂L 语句:伴静态嵌入式八 SQL 版和动态嵌入爱式 SQL傲。稗u。坝这个例子中蔼的 SEL扮ECT 语霸句说明了静半态 SQL班 的使用。哎编写静态 扒SQL 时俺,必
38、须指定百完整的语句捌。表名、列矮名以及所引袄用的数据类百型都是已知背的。惟一可半以在运行时霸指定的信息扒是使用宿主跋变量的 S搬QL 语句碍的 WHE瓣RE 子句百中的值。巴2。拔编译静态 靶SQL 语皑句(或者,鞍用 DB2唉 术语更确败切地说,准稗备好的(p柏repar斑ed)SQ矮L 语句)靶时,将为其绊生成数据访邦问计划,并矮存储在数据霸库中的一个扒包里面。当百调用包含该艾语句的应用癌程序时,这耙个包将被执耙行。由于在扳运行时不需把要编译语句胺,因此执行背静态 SQ半L 时没用蔼编译开销。白b。盎在准备语句埃时,DB2斑 使用数据皑库统计信息爱和配置参数昂来估计和获熬得访问计划叭。如果
39、数据霸库统计信息白有变化,则捌预先生成的胺访问计划可靶能不如一开爸始生成时那罢样是最佳的袄。阿k。靶创建包和将按包与数据库阿绑定时,要隘对准备静态斑 SQL 板语句的人进翱行授权。只瓣要执行包的办人拥有包的盎 EXEC败UTE 权哎限,他就不背需要具备该般包中所引用瓣的数据库对般象上的显式败的权限。m。捌动态 SQ澳L安 动态(Dy把namic把 SQL)扳 语句是在俺运行时动态芭处理的。语昂句的结构直澳到执行应用爱程序时才需氨要。蔼D。爸注意,嵌入隘式 SQL皑 简介 中搬展示的例子昂 SQL 扮语句使用动矮态 SQL奥 来 PR癌EPARE白 和 EX笆ECUTE哎 一条 D佰ELETE八
40、 语句。D艾ELETE耙 语句的文板本存储在一板个宿主变量疤 host颁VarSt班mt 中。傲当该语句 靶PREPA岸RE 好后颁,系统将生跋成该语句的蔼一个可执行爸格式,并将半其存储在数凹据库中的一摆个包里面。半一旦生成了扳数据访问计笆划,准备好笆的语句就可捌以 EXE爸CUTE 疤了。听起来扮好像有点熟板悉,不是吗跋?是的:这拔两个处理阶叭段与静态 瓣SQL 语案句正好是一隘样的。惟一摆的不同点是斑,动态 S案QL 的 巴PREPA凹RE 和 暗EXECU半TE 都是把在运行时进奥行,而静态鞍 SQL 霸在预编译时拜准备访问计凹划,并将其氨保存在数据败库中。百i。拌动态 SQ佰L 语句必
41、奥须总是在执隘行之前准备埃好,不管是暗否有相同的按语句(相同疤的访问计划吧)一次又一俺次地重复使埃用。为了最傲小化这些准稗备工作的开斑销,DB2背 提供了 昂包缓存(也挨叫 动态查白询缓存),埃用以将经常昂使用的访问败计划保存在稗内存中。包哀缓存(pa盎ckage埃 cach凹e)明显地艾减少了重复爸的 SQL坝 准备请求坝的代价,然而发起和响八应准备请求啊的开销仍然斑存在。伴E。摆在准备语句靶时,总是使版用当前数据笆库统计信息背。因此,就版可以生成最昂佳的数据访八问路径。哎2。吧SQL 语靶句的授权是阿在运行时决蔼定的。执行白应用程序的板人必须有适挨当的权限来矮访问语句中案所引用的数巴据库对
42、象。袄下一小节将罢更详细地讨埃论 DB2敖 权限。扒W。安全考虑 斑要预编译嵌挨入式静态 拔SQL 程矮序,用户需拌要程序中所邦引用数据库白对象的显式碍的权限。由板于预编译或氨 PREP白ARE 阶瓣段会生成一哎个包,并将鞍其存储在数蔼据库中,因搬此该用户还唉必须拥有 扳BINDA百DD 权限班,以便添加白新的包到数版据库中。为凹了执行带有伴静态 SQ板L 的程序肮,用户只需扮具有相关包奥上的 EX哀ECUTE蔼 权限。稗i。半编译嵌入式岸动态 SQ巴L 程序的扳用户也需要白 BIND邦ADD 权瓣限。这里不拔再需求其他挨的权限,因邦为动态 S昂QL 不是跋在编译时准稗备的。在程百序执行时,斑
43、用户需要所白有必需的权澳限来发出每坝条 SQL傲 语句,同摆时还需要为澳嵌入式 S懊QL 程序板创建的包上皑的 EXE扳CUTE 半权限。挨x。拌下面的表总板结了预编译霸和执行一个皑只有静态 肮SQL 或凹只有动态 摆SQL 的傲程序所需的伴权限。 佰p。熬静态 SQ氨L 与动态摆 SQL袄在下面的表瓣中,让我们澳总结并详细唉阐述我们所八学到的关于俺静态 SQ案L 和动态霸 SQL 扒的知识:白L。笆基于驱动程碍序的 AP跋I哀基于驱动程板序的 AP扒I巴虽然大多数俺供应商都支扳持嵌入式 扳SQL 数巴据库访问,般但如果您想笆要使用同样扳的源代码,叭并将嵌入式鞍 SQL 埃应用程序部靶署到多个
44、数翱据库系统上昂,那么还需澳要一个额外扮的工作。必白须用不同供稗应商的特定把的预编译器柏预编译程序瓣。还必须生唉成数据访问白计划,并绑翱定到目标数癌据库。为了伴增加应用程啊序的可移植搬性,还应考百虑使用本节叭介绍的 基靶于驱动程序八的解决方案。暗y。班基于驱动程昂序的解决方吧案需要一个芭驱动程序管巴理器(dr胺iver 凹manag爱er),这案是与应用程拌序打交道的啊界面。驱动袄程序管理器吧提供了一套袄工业标准的版应用程序编拜程接口(A奥PI),用靶于访问数据颁源。应用程袄序调用这些背 API,百然后被编译,再与管理翱器的库链接袄。因为驱动碍程序遵从标矮准,所以应翱用程序可以霸很容易地使爸用
45、(或装载邦)正确的驱版动程序来访耙问不同供应隘商的数据源拌。 靶7。扳在下面几小蔼节中,我们搬将看看 D扮B2 支持捌的一些 A啊PI。在本白系列后面的稗教程中,您瓣将更详细地搬了解这些 碍API。奥X。背CLI 和爱 ODBC板 API搬 扮DB2 C案all L耙evel 邦Inter氨face 袄(CLI)颁 是 IB办M 对 D瓣B2 数据佰库服务器的案可调用 S把QL 接口百。CLI 坝是用于数据凹访问的一个案 C/C+隘+ 应用程昂序编程接口扒(API)哀。您可以使拌用 DB2跋 CLI 耙开发动态应半用程序,就版像使用嵌入唉式动态 S霸QL 语句白进行开发一挨样。在这两按种情况下
46、,巴SQL 语瓣句都是在运白行时准备和版处理的。嵌半入式动态 靶SQL 要颁求有一个预埃编译器,而捌 DB2 翱CLI 则唉没有这种要板求。您只需俺编译应用程白序,并与 叭DB2 C摆LI 驱动搬程序库链接扳。安a。按DB2 C阿LI 是基靶于 Mic办rosof霸t Ope百n Dat昂abase肮 Conn拌ectiv版ity (按ODBC)颁 和 X/皑Open 昂CLI 标扳准的。在 耙ODBC 唉环境中,应碍用程序与数肮据库服务器按之间的联系疤要通过 O板DBC 驱碍动程序管理拌器。该管理器动态地加邦载应用程序霸需连接的数唉据库服务器拔所需的驱动板程序。OD佰BC 提供隘某些级别的八
47、功能支持,办当前的 D半B2 CL案I 遵从 拌ODBC 艾3.51。按X。哎要开发 D昂B2 CL办I 应用程败序,需要 暗DB2 A绊pplic版ation办 Deve柏lopme颁nt Cl耙ient。捌它包括编译胺和链接 C唉LI 应用皑程序时所有拔必需的头文挨件和库。而唉要开发 O癌DBC 应哎用程序,则吧需要 Mi颁croso邦ft 提供岸的一个 O爸DBC D摆evelo败pers背 Soft芭ware 搬Kit。敖m。盎下面的图对隘 DB2 板CLI 与澳 ODBC鞍 环境作了耙快速的比较矮。案Q。OLE D蔼B 与 A挨DO.NE碍T API拌 懊Micro疤soft 哎Ob
48、jec凹t Lin盎k Emb白edded背 Data跋base 背(OLE 隘DB) 是稗一套接口,扳它为应用程芭序提供了对阿存储在不同爱信息源上的哎数据的统一氨访问,这些百不同的信息摆源包括关系跋数据源和非昂关系数据源翱。OLE 佰DB 架构瓣由 OLE摆 DB 提把供者和 O扮LE DB叭 消费者组半成。DB2氨 同时支持班这两种角色罢。为了使 盎DB2 能半够充当 O捌LE DB斑 提供者,蔼必须要有 吧IBM O癌LE DB笆 Prov坝ider 巴for D昂B2。这是版一个本地驱巴动程序,支矮持通过 O胺LE 接口按提取或查询班 DB2 搬数据。佰g。把下面的图展拌示了一个可笆作
49、为 OL捌E DB 芭消费者的 耙DB2 数哎据库,它可案以访问来自袄任何遵从 班OLE D哎B 的数据俺源(例如一半个电子表格艾)的数据。霸同样的 D傲B2 服务白器也可以作熬为一个 O案LE DB扮 提供者,笆为 OLE氨 DB 消捌费者提供数百据。安O。爱Activ斑eX Da八ta Ob案ject 靶.NET 跋(ADO.鞍NET) 拜是 Mic背rosof半t 提供的啊另一种数据挨访问应用程半序接口。它扮是一种新的半数据访问模凹型,将其前哎任(ADO挨)最好的特蔼性与传统的傲数据库访问斑相结合,集罢成了 XM扮L 支持,隘是一种断开柏连接的(d吧iscon暗necte版d)数据架皑构
50、。有三种办方法从一个鞍 .NET板 应用程序翱连接到一个岸 DB2 鞍数据库,如吧下图所示。凹 安I。办JDBC 班和 SQL埃J API傲 挨至今为止,凹Java 败平台已经享氨誉多时,但唉仍有很多人皑正在致力于盎扩展其功能翱和提高其性翱能。访问和叭操纵 DB皑2 的 J罢ava 程袄序可以使用瓣 Java爸 Data爸base 凹Conne邦ctivi岸ty (J颁DBC) 凹API,以盎及 Emb昂edded跋 SQL 啊for J爱ava (巴SQLJ)稗 标准。这癌两个选项都白是供应商无班关的 SQ败L 接口,扮通过标准化把的 Jav拌a 方法为疤应用程序提隘供数据访问艾。背y。岸J
51、DBC 斑是用于关系哀数据库访问佰的 实际上伴的 标准 胺Java 邦API,这般种访问通过搬强大的面向癌对象的接口捌,使用动态澳 SQL。佰JDBC 肮将动态 S肮QL 传递霸给 DB2俺 附带的一氨个 JDB背C 驱动程版序。DB2笆 通过 J班DBC A阿PI 执行白 SQL 办语句,结果白被传回给 哀Java 板代码。JD氨BC 类似笆于 DB2蔼 CLI,埃您无需预编搬译或绑定 皑JDBC 唉程序,因为隘 JDBC隘 使用动态蔼 SQL。懊Z。半而 SQL八J 程序则俺包含静态嵌把入式 SQ安L 语句。斑准备一个 班SQLJ 扮程序时需要熬通过类似于摆预编译和绑啊定的步骤。拔在编译 S熬QLJ 源熬文件之前,稗必须用 S扮QLJ 翻八译器对其进拌行翻译,以俺创建本地 唉Java 捌源代码。完俺成翻译后,傲需要使用 挨DB2 f奥or Ja袄va pr柏ofile案 cust霸omize拌r (db矮2prof胺c) 创建扮 DB2 版包。跋w。爸DB2 遗拜留的基于C癌LI 的 半JDBC 皑驱动程序啊 肮根据 Ja扮va 2 扳Platf搬orm, 爱Enter瓣prise吧 Edit拜ion (笆J2EE)傲 规范,用岸于获得数据昂访问的 J叭ava 方安法和接口可叭以打包成 伴JDBC 疤驱动程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年幼儿园班务个人工作方案
- 配电线路知识培训课件
- 酒店服务质量提升
- 用友管理信息化课堂薪资管理
- 2025年吉林长春市普通高中高三五月月考历史试题试卷含解析
- 上海市闵行区2025年第二学期初三英语试题期末教学质量(一模)监测卷含答案
- 河南省安阳市安阳县一中2025年高三3月联考英语试题含解析
- 广州涉外经济职业技术学院《艺术实践(3)》2023-2024学年第二学期期末试卷
- 泉州纺织服装职业学院《园艺学通论》2023-2024学年第二学期期末试卷
- 清远市2025届四下数学期末教学质量检测试题含解析
- 《环境设计工程计量与计价》课件-1.什么是装饰工程预算
- 品管圈PDCA案例-提高乳腺外科术区引流管固定合格率
- 2024年度MCN机构与达人专属合作合同3篇
- 《城市治安管理存在的问题及优化建议:温州市鹿城区为例》9400字(论文)
- 2025年高考语文备考之思辨型作文和作文的思辨性
- 陪诊培训课件
- 《无人机培训教材》课件
- 《手术分级管理制度》课件
- 移动成都分公司城区营业厅物业管理投标书
- 回收太空垃圾
- 打印一张离婚协议书范文表格
评论
0/150
提交评论