DB2數(shù)據(jù)庫(kù)對(duì)象基礎(chǔ)知識(shí)_第1頁(yè)
DB2數(shù)據(jù)庫(kù)對(duì)象基礎(chǔ)知識(shí)_第2頁(yè)
DB2數(shù)據(jù)庫(kù)對(duì)象基礎(chǔ)知識(shí)_第3頁(yè)
DB2數(shù)據(jù)庫(kù)對(duì)象基礎(chǔ)知識(shí)_第4頁(yè)
DB2數(shù)據(jù)庫(kù)對(duì)象基礎(chǔ)知識(shí)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、把DB2數(shù)據(jù)扒庫(kù)對(duì)象叭基本數(shù)據(jù)庫(kù)扮對(duì)象 鞍數(shù)據(jù)庫(kù)對(duì)象挨是一個(gè)數(shù)據(jù)把庫(kù)的構(gòu)造塊頒(buil隘ding 拌block?。?。DB2懊 提供了不巴同類(lèi)型的數(shù)安據(jù)庫(kù)對(duì)象來(lái)背存儲(chǔ)和表示把不同信息。捌通過(guò)使用數(shù)據(jù)定義語(yǔ)言柏(DDL)澳,可以創(chuàng)建把、修改和刪班除數(shù)據(jù)庫(kù)對(duì)霸象。要操縱唉數(shù)據(jù)庫(kù)對(duì)象懊,可以使用按數(shù)據(jù)操縱語(yǔ)矮言(DML埃),例如 疤SELEC稗T、UPD百ATE、I邦NSERT芭 和 SE俺LECT 骯語(yǔ)句。常用白的數(shù)據(jù)庫(kù)對(duì)辦象有:暗x。表 瓣用戶定義數(shù)傲據(jù)類(lèi)型 約束 視圖 索引 班除了 Fa吧mily 隘Funda愛(ài)menta版ls 教程板里介紹的一扳些數(shù)據(jù)庫(kù)對(duì)拔象外,還有盎一些其他的霸對(duì)象,很多

2、阿開(kāi)發(fā)人員在唉開(kāi)發(fā) DB絆2 應(yīng)用程阿序時(shí)會(huì)發(fā)現(xiàn)半這些對(duì)象比啊較有用。本叭節(jié)我們將介拌紹這些對(duì)象搬。八v。柏在繼續(xù)之前辦,有一點(diǎn)要擺注意:在下背面看到的一藹些例子中,礙對(duì)象名稱是阿以小寫(xiě)形式哎指定的。無(wú)哀論 DB2懊 在哪個(gè)平柏臺(tái)上運(yùn)行,跋它總是以大扳寫(xiě)形式存儲(chǔ)絆名稱,除非埃標(biāo)識(shí)符的名白稱以雙引號(hào)哀()括柏起來(lái)了。凹R。版例如,下面澳的語(yǔ)句創(chuàng)建邦一個(gè)名為 盎emplo哀yee(小澳寫(xiě))的表,皚該表的列定伴義與表 E鞍MPLOY瓣EE(大寫(xiě)霸)是一樣的芭。唉8。懊癌CREAT哎E TAB捌LE e安mploy擺ee L般IKE e拔mploy耙ee柏z。別名 安別名(al背ias) 擺是指一個(gè)已

3、暗有的表、視佰圖的另一個(gè)吧名稱,也叫半昵稱(ni稗cknam拌e)。別名斑也可以作為柏另一個(gè)別名盎的昵稱。與澳這些對(duì)象一叭樣,別名也俺可以被創(chuàng)建礙或刪除,可版以有與之相柏關(guān)的注釋。傲下面是 C骯REATE靶 ALIA半S 語(yǔ)句的壩一些例子:暗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、 語(yǔ)句頒比較簡(jiǎn)單。稗可以在源對(duì)伴象所在的同班一模式中創(chuàng)敖建別名(如捌第 1 行艾),或者也澳可以全限定霸別名(如第叭 2 行)骯。為了與 骯DB2 f扒or zS板e(cuò)ries敗 兼容,使爸用關(guān)鍵字 把SYNON傲YM 代替般 ALIA瓣S 也是合俺法的(如第擺 3 行)霸。八A。拔使用別名時(shí)跋無(wú)需專(zhuān)門(mén)的背授權(quán)或權(quán)限稗。不過(guò),需八要獲得與別捌名所引用的礙底層對(duì)象相頒關(guān)的授權(quán)。背關(guān)于數(shù)據(jù)庫(kù)安對(duì)象權(quán)限的版完整清單,皚請(qǐng)參考 D八B2 DB壩A 認(rèn)證教板程 Ser頒ver m跋anage哀ment(絆請(qǐng)參閱 參挨考資料)。懊e。胺前面已提到敖,我們也可癌以為 昵稱板 創(chuàng)建別名澳。昵稱是引捌用位于聯(lián)邦伴

5、系統(tǒng)上的數(shù)稗據(jù)表或視圖班的數(shù)據(jù)庫(kù)對(duì)耙象。聯(lián)邦數(shù)隘據(jù)庫(kù)支持超愛(ài)出了本教程藹的范圍。在搬本教程系列藹的第 2 版部分,Da扮ta ma耙nipul襖ation阿 ,我們將哀學(xué)習(xí)更多有翱關(guān)聯(lián)邦系統(tǒng)的知識(shí)。隘M。拜要為別名添辦加注釋?zhuān)砂恳园l(fā)出以下暗語(yǔ)句:澳巴COMME啊NT ON拔 alia挨stab1按 IS 爸My fi矮rst a矮lias 凹o(jì)n ta昂b1骯r。爸要?jiǎng)h除一個(gè)搬別名,使用皚 DROP唉 語(yǔ)句,這背與所有其他爸?jǐn)?shù)據(jù)庫(kù)對(duì)象拜是一樣的:按v。吧板DROP 拜ALIAS爸 alia八stab1序列對(duì)象 澳序列(se癌quenc氨e)是一種阿數(shù)據(jù)庫(kù)對(duì)象敖,這種對(duì)象稗允許自動(dòng)生安成值。序

6、列拔對(duì)象與標(biāo)識(shí)半列(ide吧ntity colu爸mn)不同稗,標(biāo)識(shí)列是疤要與一個(gè)特拔定的表綁在版一起的,而芭序列是一種霸全局的、獨(dú)般立的對(duì)象,癌同一個(gè)數(shù)據(jù)霸庫(kù)中的任何唉表都可以使百用它。矮X。隘標(biāo)識(shí)列是序絆列對(duì)象的一種特例。因耙此,標(biāo)識(shí)列扒的特征也適巴用于序列對(duì)壩象。下面就安例釋了一條岸 CREA拔TE SE礙QUENC氨E 語(yǔ)句:熬n。氨藹CREAT鞍E SEQ熬UENCE myse伴q AS 愛(ài)INTEG捌ER傲A。澳邦 S敗TART 案WITH 癌360 襖 把半 I叭NCREM吧ENT BY 10爸拌 N胺O MAX壩VALUE霸隘 C唉YCLE哎胺 CACHE 半20 頒任何包括

7、叭0 在內(nèi)的拔數(shù)字?jǐn)?shù)據(jù)類(lèi)藹型都可用于疤序列值。這敖些類(lèi)型包括哎 SMAL矮LINT、背INTEG拔ER、BI鞍GINT 暗或 DEC八IMAL。胺基于這些數(shù)哎據(jù)類(lèi)型的任搬何用戶定義愛(ài)獨(dú)特類(lèi)型(昂disti瓣nct t般ype)也阿都可以用于澳序列值。這靶進(jìn)一步擴(kuò)展拜了用戶定義愛(ài)獨(dú)特類(lèi)型在拜應(yīng)用程序中疤的使用。 q。罷如上面的例班子所示,您耙可以為序列哀對(duì)象指定起藹始值,從而骯自定義序列柏對(duì)象。在這癌個(gè)例子中,捌序列的第一哎個(gè)值是 3傲60。后續(xù)柏值的生成是搬由 INCREMEN敗T BY 癌子句控制的凹。這里還支瓣持正、負(fù)常矮量,以產(chǎn)生暗升序和降序佰值。 扳3。岸缺省情況下按,一個(gè)序列辦所生成

8、的最藹小值和最大暗值是由該序罷列數(shù)據(jù)類(lèi)型耙的取值范圍版來(lái)界定的。藹例如,IN埃TEGER啊 類(lèi)型的序岸列值必須處芭在 -2,骯147,4笆83,64稗7 到 2稗,147,巴483,6愛(ài)47 之間奧的范圍內(nèi)。耙在 DB2百 SQL 吧Refer凹ence 礙Guide挨 中可以找扮到所有數(shù)字扒數(shù)據(jù)類(lèi)型的啊取值范圍。俺為了改變這爸種缺省行為絆,可以使用罷 MINV瓣ALUE 礙和 MAX叭VALUE澳 選項(xiàng)來(lái)為疤生成的值設(shè)八置一個(gè)邊界絆。如果達(dá)到捌了最小值或按最大值,那鞍么可以使用罷另一個(gè)選項(xiàng)皚,即 CY氨CLE 或把 NO C皚YCLE 隘來(lái)規(guī)定序列挨值是否應(yīng)該安循環(huán)。注意鞍,如果 C半YCL

9、E 半生效,則序骯列就可以生奧成重復(fù)的值敗。襖j。班CACHE埃 選項(xiàng)允許隘 DB2 艾將一些預(yù)先俺分配好空間澳的值保留在暗內(nèi)存中,以襖提高性能。埃CACHE斑 20 是俺缺省的行為版。關(guān)于這個(gè)艾選項(xiàng)有一點(diǎn)癌要謹(jǐn)記:如壩果在所有緩絆存的值被使襖用之前關(guān)閉捌 DB2,頒那么任何緩背存的值和未白使用的值都稗將被丟棄。背當(dāng) DB2斑 重新啟動(dòng)哎時(shí),又會(huì)生壩成和緩存下扒一塊的值,艾從而造成值拜之間的不連哎續(xù),即值之巴間存在間隔氨。如果應(yīng)用柏程序不允許埃值之間有間背隔,可以考八慮使用 N背OCACH岸E 選項(xiàng)。翱o。扮如果沒(méi)有使瓣用緩存,則奧性能就會(huì)下岸降,因?yàn)橐额l繁地生成敖序列數(shù)字。胺每當(dāng)生成一扮個(gè)

10、新值的時(shí)巴候,都會(huì)寫(xiě)按下一條日志壩記錄。因此扮,更高效的按做法是根據(jù)安請(qǐng)求來(lái)獲取拌值,并將這癌些值緩存在扳內(nèi)存中。佰J。扒通過(guò) AL敗TER S百EQUEN隘CE 語(yǔ)句拔,可以更改敗序列對(duì)象的愛(ài)特征。除了辦序列值的數(shù)邦據(jù)類(lèi)型以外辦,上面所討靶論的所有的瓣設(shè)置都可以襖修改。要獲挨得完整的語(yǔ)扮法,請(qǐng)參考熬 DB2 阿SQL R稗efere背nce G扳uide 拌(請(qǐng)參閱 版參考資料)拌。埃W。藹刪除一個(gè)序列對(duì)象與刪頒除任何其他瓣的數(shù)據(jù)庫(kù)對(duì)矮象是一樣的礙,不同之處暗是這里還要骯使用到一個(gè)阿 RESTRICT 藹關(guān)鍵字。這白樣可以防止叭在有依賴的敖情況下刪除骯序列。伴9。頒DROP 跋SEQUENC

11、E m版yseq 鞍RESTR藹ICT胺生成和獲取霸序列值 搬序列是一種澳數(shù)據(jù)庫(kù)對(duì)象爸,因此對(duì)序哀列的訪問(wèn)也埃是由權(quán)限來(lái)拌控制的。缺暗省情況下,盎只有序列的胺創(chuàng)建者,即壩 SYSA笆DM 和 DBADM襖 擁有該對(duì)艾象的 US盎AGE 權(quán)百限。如果希敖望其他用戶白也能夠使用癌序列,則需盎要使用下面翱的語(yǔ)句:凹W。爸GRANT哎 USAG拌E ON 敗SEQUE般NCE s背eq_ob澳ject_耙name 愛(ài)TO PU皚BLIC哎U。般有兩種表達(dá)背式可用于生拜成和獲取序巴列值。NE癌XTVAL耙 FOR 版seq-n頒ame 用叭于獲取下一扒個(gè)序列值,板而 PRE笆VVAL 背FOR s般eq

12、-na疤me 則用絆于獲取上一凹個(gè)生成的序拌列值。下面斑的例子例釋骯了這些表達(dá)礙式的使用。哀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。襖假設(shè)我們以埃一個(gè)空表 辦t1 開(kāi)始挨,myse叭q 的下一骯個(gè)序列值是愛(ài) 1。如果壩禁用了 a隘utoco拜mmit,胺則在執(zhí)行上耙述語(yǔ)句之后盎,t1 將半包含下面幾按行:阿G。案1案皚NAME板-隘-唉骯-八-按1BOB2PAT八4唉岸PAUL半 3 re埃cord(扳s) se爸lecte芭d.班雖然為 G按ENE 生壩成的值被回芭滾了,但是案 DB2 般并沒(méi)有再次般使用它。因挨而,下一個(gè)鞍為 PAU擺L 生成的敖序列值就是擺 4,而不笆是 3。 氨e。頒這個(gè)例子中拔的最后

14、一條胺語(yǔ)句展示了敖如何使用 絆PREVV擺AL 表達(dá)安式。宿主變氨量 :ho凹stvar捌 存儲(chǔ)當(dāng)前拜會(huì)話中生成隘的最后一個(gè)百值。如果想按保存前面生捌成的值,那半么應(yīng)該在生拔成下一個(gè)值疤之前保存 扒PREVV哀AL 值。鞍j。臨時(shí)表 般顧名思義,板臨時(shí)表(t按empor把a(bǔ)ry t疤able)搬不是永久性絆的數(shù)據(jù)庫(kù)對(duì)芭象。臨時(shí)表癌與普通的表按在行為上是矮一樣的,不邦同之處是,芭并非所有的扮功能和選項(xiàng)扒都是受支持耙的和/或是疤必需的。臨把時(shí)表只能維啊持在一次連百接期間。當(dāng)傲連接關(guān)閉時(shí)按,在此連接皚內(nèi)聲明的所翱有臨時(shí)表都埃將自動(dòng)刪除骯掉。 奧V。稗只有聲明臨耙時(shí)表的會(huì)話扮或應(yīng)用程序癌才能訪問(wèn)臨愛(ài)時(shí)

15、表。如果癌兩個(gè)應(yīng)用程般序用相同的拜名字創(chuàng)建了稗一個(gè)臨時(shí)表盎,該臨時(shí)表版的每個(gè)實(shí)例頒仍然是惟一氨的。因而,拔完全不必?fù)?dān)百心出現(xiàn)臨時(shí)疤數(shù)據(jù)沖突的哎情況。由于白臨時(shí)表只允捌許單連接(愛(ài)singl澳e-con稗necti稗on)訪問(wèn)絆,因此這里白無(wú)需使用鎖敖。這正是臨皚時(shí)表的一個(gè)凹主要的性能癌優(yōu)勢(shì)。把U。矮聲明臨時(shí)表懊 敖要聲明一個(gè)頒臨時(shí)表,必吧須存在一個(gè)背 USER傲 臨時(shí)表空襖間(不同于背 SYST癌EM 臨時(shí)奧表空間),傲用以存儲(chǔ)臨奧時(shí)表的定義斑和內(nèi)容。S邦YSTEM笆 臨時(shí)表空柏間只是 D癌B2 在內(nèi)笆部用來(lái)執(zhí)行辦諸如排序之鞍類(lèi)操作的。吧下面這條簡(jiǎn)爸單的語(yǔ)句將靶創(chuàng)建一個(gè)用班戶臨時(shí)表空傲間。按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。佰聲明全局臨挨時(shí)表時(shí),可斑以使用很多笆可選子句。捌下面的例子百對(duì)這些子句拜的特性作了盎說(shuō)明。板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翱在這個(gè)例子襖中,聲明了愛(ài)臨時(shí)表 t敗_dept扳,這個(gè)表有拜兩列。ON靶 COMM壩IT DE八LETE 捌ROWS 骯子句規(guī)定在板每次執(zhí)行 扒COMMI跋T 操作時(shí)版刪除臨時(shí)表吧的內(nèi)容。在藹 DB2 隘V8 中,耙可以選擇記壩錄對(duì)臨時(shí)表俺的更改,以罷便回滾。這板個(gè)例子規(guī)定芭對(duì)該表的更啊改是 NO拔T LOG把GED。這斑意味著對(duì)該半表的任何操佰作,包括創(chuàng)翱建以及更改岸,都不做日拌志記錄。如疤果在一個(gè)工作單位內(nèi)創(chuàng)八建表,然后拌回滾,則臨擺時(shí)表將被刪昂除。另一方翱面,如果在絆此工作單位骯內(nèi)刪除該表邦,則該表在安恢復(fù)時(shí)將沒(méi)霸有任何行。把U。靶無(wú)需使用 艾IN 子句

18、稗來(lái)指定該臨盎時(shí)表將要使唉用的用戶臨骯時(shí)表空間。熬如果沒(méi)有指鞍定該信息,靶DB2 就骯會(huì)搜索最適扳用的表空間扮。如果找不擺到用戶臨時(shí)翱表空間,D翱B2 將產(chǎn)啊生一個(gè)錯(cuò)誤敗。辦1。奧讓我們看看爸另一個(gè)例子翱:敗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斑臨時(shí)表 t扮_proj罷 是用 L柏IKE 關(guān)跋鍵字聲明的板,因此它擁敖有與名為 愛(ài)proje懊ct 的持斑久表或視圖挨相同

19、的列定伴義。ON 伴COMMI盎T PRE巴SERVE邦 ROWS百 子句表明奧,在執(zhí)行 隘COMMI捌T 語(yǔ)句時(shí)埃,該臨時(shí)表柏中的所有行拌都將被保留邦。因此,這擺些行就可以班在下一次事艾務(wù)中用于進(jìn)白一步的處理。岸A。昂在同一次會(huì)扳話中使用相頒同的名稱聲稗明另一個(gè)臨隘時(shí)表之前,鞍首先必須刪氨除該臨時(shí)表半??梢燥@式耙地刪除該表班,也可以像岸這里一樣使熬用 WIT巴H REP盎LACE 拔選項(xiàng)。如果鞍使用了 W襖ITH R骯EPLAC佰E 選項(xiàng),叭DB2 將藹隱式地刪除唉所有數(shù)據(jù),版刪除該臨時(shí)伴表,并用新敗的定義重新背創(chuàng)建該臨時(shí)扳表。板U。矮如果使用了白 連接池(捌conne柏ction敖 poo

20、l白ing),襖WITH 案REPLA翱CE 選項(xiàng)用起來(lái)就十百分方便了。案連接池是用般于重用數(shù)據(jù)敗庫(kù)連接的一挨種機(jī)制,這唉樣就不必完邦全按照要求班分配和回收壩資源。這些霸操作的開(kāi)銷(xiāo)板都是相當(dāng)大岸的,尤其是版在有大量執(zhí)奧行很短事務(wù)氨的連接時(shí),案更是如此。埃由于沒(méi)有釋靶放連接,先俺前使用的臨襖時(shí)表就可能敗得不到清除愛(ài)。下一個(gè)使傲用該連接的氨應(yīng)用程序就叭可能使用上癌一次執(zhí)行時(shí)搬遺留下來(lái)的白數(shù)據(jù)。因此氨,使用 W霸ITH R隘EPLAC伴E 選項(xiàng)可阿以保證用新昂的定義刷新埃所聲明的臨氨時(shí)表。案S。阿模式與數(shù)據(jù)搬庫(kù)對(duì)象擺 翱大多數(shù)數(shù)據(jù)敗庫(kù)對(duì)象都是唉用一個(gè) 模敗式(sch百ema) 奧和一個(gè) 對(duì)啊象名(o

21、b八ject 哎name)拜標(biāo)識(shí)的。數(shù)澳據(jù)庫(kù)模式為耙數(shù)據(jù)庫(kù)對(duì)象提供邏輯上的分類(lèi)。下案面例釋了這俺種分為兩部把分的對(duì)象名翱:澳F。阿DB2AD敗MIN.E捌MPLOY藹EE辦HRPRO凹D.AUD氨IT_VI辦EW矮HRPRO隘D.AUD辦IT_TR吧IG耙如果在訪問(wèn)暗數(shù)據(jù)庫(kù)對(duì)象爸時(shí)沒(méi)有指定扒模式,則用挨于建立數(shù)據(jù)絆庫(kù)連接的用阿戶 ID 爸將被設(shè)為缺敖省的模式。柏例如,如果巴用戶 db白2admi凹n 連接到翱一個(gè)數(shù)據(jù)庫(kù)耙,并創(chuàng)建表佰 T1,則 DB2 半將創(chuàng)建一個(gè)白名為 db板2admi按n.T1 壩的表。此后疤所有引用非皚全限定(u案nqual頒ified芭)表名 T搬1 的 S芭QL 語(yǔ)句

22、靶都解析為 凹db2ad把min.T頒1。矮q。暗DB2 專(zhuān)胺用寄存器:藹CU唉RRENT襖 SCHE柏MA瓣 澳您在進(jìn)行自邦己的數(shù)據(jù)庫(kù)埃工作時(shí)可能案已經(jīng)發(fā)現(xiàn),白用同為對(duì)象絆的模式的用邦戶 ID 叭連接到一個(gè)隘數(shù)據(jù)庫(kù)并非板總是可行的搬。而硬編碼皚(hard熬-codi澳ng)應(yīng)用扮程序以完全版限定對(duì)象也胺不是最好的愛(ài)解決辦法。昂幸運(yùn)的是,阿DB2 允案許使用 S奧ET CU搬RRENT班 SCHE叭MA 命令班更改當(dāng)前模班式。缺省情俺況下,CU霸RRENT哎 SCHE礙MA DB斑2 專(zhuān)用寄拜存器被設(shè)置拔為連接到數(shù)安據(jù)庫(kù)的 U笆SER。如啊果更改 C罷URREN凹T SCH百EMA,那襖么任何

23、非全氨限定的數(shù)據(jù)翱庫(kù)對(duì)象都會(huì)般在前面加上八新的值。案I。八當(dāng)前模式可矮以通過(guò)下面版這個(gè)命令獲柏得:捌VALUE叭S CUR扮RENT 奧SCHEM凹A絆要對(duì)它進(jìn)行埃更改,只需敗使用下面的班命令:隘SET S翱CHEMA翱=db2a瓣dmin霸DB2應(yīng)用艾程序開(kāi)發(fā)數(shù)翱據(jù)庫(kù)對(duì)象例程 靶在本節(jié)中,跋我們將介紹俺更多類(lèi)型的般數(shù)據(jù)庫(kù)對(duì)象唉。這些對(duì)象骯統(tǒng)統(tǒng)都叫做拌 例程(r絆outine)。從功芭能上分,主半要有三種例霸程:存儲(chǔ)過(guò)隘程(sto礙red p把roced邦ure)、頒函數(shù)(fu稗nctio氨n)和方法癌(meth般od)。(暗要了解這些礙類(lèi)型之間的版更多不同之骯處,請(qǐng)參閱背 存儲(chǔ)過(guò)程罷、函數(shù)和

24、方氨法。)稗9。柏例程是封裝澳了與某一特疤定任務(wù)相關(guān)鞍的編程和數(shù)安據(jù)庫(kù)邏輯的昂數(shù)據(jù)庫(kù)對(duì)象背。有效地使隘用例程可以邦簡(jiǎn)化應(yīng)用程靶序的代碼,敖并增加代碼爸的可重用性耙。例如,如岸果將某種業(yè)扒務(wù)邏輯封裝安在一個(gè)例程礙中,那么對(duì)氨此業(yè)務(wù)規(guī)則扒的更改只會(huì)爸影響那個(gè)特昂定的例程。拌從而可最小瓣化對(duì)應(yīng)用程叭序的更改。跋6。案例程是在數(shù)耙據(jù)庫(kù)服務(wù)器暗上定義和處爸理的。這樣跋就允許應(yīng)用霸程序利用數(shù)扒據(jù)庫(kù)服務(wù)器伴的能力,從敖而減少客戶骯機(jī)上的處理扳負(fù)載。霸2。愛(ài)通常,復(fù)雜板的業(yè)務(wù)邏輯爸需要多條 鞍SQL 語(yǔ)捌句。這些語(yǔ)絆句要分別地翱從客戶機(jī)發(fā)熬送到服務(wù)器岸,如果數(shù)據(jù)暗庫(kù)活動(dòng)很多霸,就會(huì)產(chǎn)生皚大量的網(wǎng)絡(luò)百傳輸。如果

25、疤將這些操作胺放在一個(gè)例翱程中,那么鞍客戶機(jī)和服芭務(wù)器之間的奧網(wǎng)絡(luò)傳輸就埃會(huì)大大減少辦,從而可以藹提高應(yīng)用程骯序的總體性笆能。扮X。吧加強(qiáng)安全的能力是使用矮例程的另一愛(ài)個(gè)關(guān)鍵優(yōu)勢(shì)胺。例程可用鞍于屏蔽對(duì)底白層數(shù)據(jù)庫(kù)對(duì)爸象的直接訪皚問(wèn)。用 E骯XECUT佰E 權(quán)限調(diào)傲用一個(gè)例程絆就足夠了,白無(wú)需擁有訪頒問(wèn)底層數(shù)據(jù)敗庫(kù)對(duì)象的顯按式的權(quán)限。板0。稗例程的不同八實(shí)現(xiàn)岸 頒例程有幾種搬可能的實(shí)現(xiàn)霸:版內(nèi)置(bu奧ilt-i吧n)例程是耙 DB2 白系統(tǒng)附帶的斑。這些例程皚定義在一個(gè)辦系統(tǒng)模式中澳,例如 S頒YSIBM白、SYSP扳ROC、S爸YSFUN扮 和 SY案STOOL昂S。 襖9。般Sourc氨e

26、d 例程皚只適用于函唉數(shù)。sou拔rced 背例程復(fù)制另啊一個(gè)函數(shù)的傲語(yǔ)義。 搬w。唉外部(ex八terna罷l)例程是熬用一種外部芭的編程語(yǔ)言伴實(shí)現(xiàn)的。對(duì)澳于 DB2氨 V8.1傲,可以用下昂列受支持的襖語(yǔ)言開(kāi)發(fā)例柏程: 捌o。傲Java 扒語(yǔ)言 俺C/C+扳 翱OLE(僅鞍用于存儲(chǔ)過(guò)按程) 啊OLE D翱B(僅用于芭表函數(shù)) 矮SQL 例霸程是用 S挨QL Pr壩ocedu絆ral L澳angua罷ge (S疤QL PL柏)實(shí)現(xiàn)的。皚DB2 S翱QL PL般 是 SQ伴L(zhǎng) Per般siste凹nt St礙ored 靶Modul瓣es (S佰QL/PS盎M) 語(yǔ)言稗標(biāo)準(zhǔn)的一個(gè)矮子集。該標(biāo)礙準(zhǔn)

27、是與 S稗QL 一起凹用來(lái)編寫(xiě)存拌儲(chǔ)過(guò)程、函疤數(shù)和方法的矮結(jié)構(gòu)化編程芭語(yǔ)言的基礎(chǔ)。它將 S敖QL 數(shù)據(jù)頒訪問(wèn)的容易爸性與簡(jiǎn)單編氨程語(yǔ)言的流按控制結(jié)構(gòu)相扳結(jié)合。這就版是 SQL搬 PL 如按此流行的一邦個(gè)主要原因爸。頒M。俺存儲(chǔ)過(guò)程、版函數(shù)和方法芭 擺存儲(chǔ)過(guò)程 半是一種數(shù)據(jù)癌庫(kù)對(duì)象,它扒包含用于訪伴問(wèn)和修改一案?jìng)€(gè)或多個(gè)表岸中數(shù)據(jù)的專(zhuān)捌門(mén)程序。在頒一個(gè)存儲(chǔ)過(guò)骯程內(nèi),可以?shī)W以一定的流捌邏輯包裝多百條 SQL安 語(yǔ)句。存昂儲(chǔ)過(guò)程可以俺作為對(duì)客戶盎機(jī)應(yīng)用程序哀或其他例程版的子例程擴(kuò)安展。存儲(chǔ)過(guò)白程的執(zhí)行和挨管理是由一骯個(gè)關(guān)系數(shù)據(jù)柏庫(kù)管理系統(tǒng)皚(RDBM熬S)控制的奧。矮K。埃函數(shù) 是可艾以自定義的擺 S

28、QL 愛(ài)擴(kuò)展??梢园辉?SQL奧 語(yǔ)句(例霸如一個(gè) s氨elect昂-list捌 或 FR扳OM 子句版)中調(diào)用函柏?cái)?shù)。有四種斑類(lèi)型的函數(shù)靶:聚合(a矮ggreg暗ate)函班數(shù)、標(biāo)量(愛(ài)scala班r)函數(shù)、叭行(row捌)函數(shù)以及昂 表(table)函笆數(shù)。 佰n。捌存儲(chǔ)過(guò)程通柏常用于封裝辦復(fù)雜的應(yīng)用愛(ài)程序邏輯,拜以及執(zhí)行開(kāi)芭銷(xiāo)較大的數(shù)安據(jù)庫(kù)操作,八例如多表聯(lián)霸結(jié)和游標(biāo)操盎作。而函數(shù)挨 半佰 尤其是 懊SQL 函愛(ài)數(shù) 胺敖 通常包含襖更簡(jiǎn)單的操案作。編寫(xiě)在胺 SQL 拌函數(shù)中的語(yǔ)礙句將展開(kāi)到懊引用它們的扒 SQL 襖語(yǔ)句中,與稗這些 SQ哎L 語(yǔ)句一百起執(zhí)行。這案導(dǎo)致這些語(yǔ)安句在執(zhí)行時(shí)伴動(dòng)

29、態(tài)編譯。挨如果一條 笆SQL 語(yǔ)佰句中使用了板一個(gè)復(fù)雜的稗 SQL 版函數(shù),則 柏DB2 要辦求使用附加盎的資源來(lái)編翱譯它,并生靶成一個(gè)數(shù)據(jù)把訪問(wèn)計(jì)劃。芭這樣將影響矮整個(gè)運(yùn)行時(shí)板性能。 稗a。罷方法 用于捌封裝為結(jié)構(gòu)啊類(lèi)型提供行背為的邏輯,澳結(jié)構(gòu)類(lèi)型包懊含一個(gè)或多絆個(gè)指定的屬懊性,各屬性熬有其自己的矮數(shù)據(jù)類(lèi)型。扒p。疤DB2 專(zhuān)埃用寄存器:皚CURRE柏NT PA芭TH阿 捌與大多數(shù) 擺DB2 數(shù)芭據(jù)庫(kù)對(duì)象一佰樣,一個(gè)完板整的例程名襖由一個(gè)模式邦和一個(gè)例程瓣名組成。 礙DB2 專(zhuān)奧用寄存器 柏CURRE敗NT SC八HEMA可俺以為大多數(shù)啊數(shù)據(jù)庫(kù)對(duì)象靶解析模式,扒但不能為例拜程解析模式跋。相反

30、,D拔B2 是使啊用 CUR跋RENT 啊PATH 懊專(zhuān)用寄存器靶來(lái)定位例程跋的。凹n。奧通過(guò)下面的矮命令可以獲頒得 CUR鞍RENT 骯PATH 襖設(shè)置:皚VALUE熬S CUR扳RENT 安PATH絆缺省路徑包爸含三個(gè)系統(tǒng)翱模式,后面板跟有連接到熬數(shù)據(jù)庫(kù)的當(dāng)疤前用戶。例捌如:埃6。藹SYSI辦BM,岸SYSFU拜N,S胺YSPRO矮C,D按B2ADM啊IN翱T。胺下面是一些背例子和技巧版,您可以用佰它們來(lái)更新絆 PATH拔:敖SET P伴ATH=C翱URREN暗T PAT耙H,US藹ER2愛(ài)VALUE傲S CUR班RENT 愛(ài)PATH癌-巴-耙-辦-罷-霸-鞍SYSI拔BM,懊SYSFU埃

31、N,S岸YSPRO俺C,D擺B2ADM唉IN,斑USER2隘阿e。俺1壩 reco版rd(s)霸 sele骯cted.鞍嵌入式 S哎QL 程序把嵌入式 S拜QL 簡(jiǎn)介懊 凹DB2 為絆開(kāi)發(fā)人員提俺供了不同的凹編程方法來(lái)扮編寫(xiě)應(yīng)用程拔序。最直接伴的一種方法皚是嵌入式 疤SQL 編半程。這種編捌程方法是 巴直接的,因昂為程序嵌入盎了直接與 皚DB2 交霸互的 SQ絆L 語(yǔ)句。般程序可以用安下列受支持安的編程語(yǔ)言靶中的任何一稗種來(lái)編寫(xiě):6。板C/C+愛(ài) 疤FORTR艾AN 傲COBOL八 隘Java 拜語(yǔ)言 (S把QLJ) 半如何構(gòu)造嵌愛(ài)入式 SQ敗L 語(yǔ)句取版決于所選擇按的編程語(yǔ)言盎。C/C+翱+

32、 和 F骯ORTRA傲N 中的嵌吧入式 SQ板L 語(yǔ)句前隘面要加上 奧EXEC 埃SQL 關(guān)叭鍵字:班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胺 語(yǔ)句非常澳類(lèi)似于 C把/C+ 邦中的那些嵌癌入式 SQ骯L 語(yǔ)句,癌不同的是在耙語(yǔ)句的后面頒要使用 E挨ND-EX扒EC 關(guān)鍵唉字:哎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 愛(ài)語(yǔ)言中的嵌熬入式 SQ壩L 語(yǔ)句與疤前面兩個(gè)例愛(ài)子中展示的矮那些嵌入式伴 SQL 頒語(yǔ)句稍微有熬些不同,這吧里必須指定懊語(yǔ)句將來(lái)執(zhí)挨行時(shí)所在的絆連接上下文背。下面是一白個(gè)例子:皚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 語(yǔ)句是凹什么樣子的瓣,下面給出板了用 C 百編寫(xiě)的一個(gè)伴程序的代碼吧片斷。在本藹系列(請(qǐng)參昂閱 參考資藹料)的第 巴3 篇教程拌中,您將了壩解到更多關(guān)般于程序預(yù)編隘譯和實(shí)際代柏碼開(kāi)發(fā)的知瓣識(shí)。巴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搬;唉靜態(tài) SQ俺L懊 骯在前一小節(jié)盎中,我們演扳示了兩種不耙同類(lèi)型的嵌唉入式 SQ昂L 語(yǔ)句:伴靜態(tài)嵌入式八 SQL 版和動(dòng)態(tài)嵌入愛(ài)式 SQL傲。稗u。壩這個(gè)例子中藹的 SEL扮ECT 語(yǔ)霸句說(shuō)明了靜半態(tài) SQL班 的使用。哎編寫(xiě)靜態(tài) 扒SQL 時(shí)俺,必

38、須指定百完整的語(yǔ)句捌。表名、列矮名以及所引襖用的數(shù)據(jù)類(lèi)百型都是已知背的。惟一可半以在運(yùn)行時(shí)霸指定的信息扒是使用宿主跋變量的 S搬QL 語(yǔ)句礙的 WHE瓣RE 子句百中的值。巴2。拔編譯靜態(tài) 靶SQL 語(yǔ)皚句(或者,鞍用 DB2唉 術(shù)語(yǔ)更確敗切地說(shuō),準(zhǔn)稗備好的(p柏repar斑ed)SQ矮L 語(yǔ)句)靶時(shí),將為其絆生成數(shù)據(jù)訪邦問(wèn)計(jì)劃,并矮存儲(chǔ)在數(shù)據(jù)霸庫(kù)中的一個(gè)扒包里面。當(dāng)百調(diào)用包含該艾語(yǔ)句的應(yīng)用癌程序時(shí),這耙個(gè)包將被執(zhí)耙行。由于在扳運(yùn)行時(shí)不需把要編譯語(yǔ)句胺,因此執(zhí)行背靜態(tài) SQ半L 時(shí)沒(méi)用藹編譯開(kāi)銷(xiāo)。白b。盎在準(zhǔn)備語(yǔ)句埃時(shí),DB2斑 使用數(shù)據(jù)皚庫(kù)統(tǒng)計(jì)信息愛(ài)和配置參數(shù)昂來(lái)估計(jì)和獲熬得訪問(wèn)計(jì)劃叭。如果

39、數(shù)據(jù)霸庫(kù)統(tǒng)計(jì)信息白有變化,則捌預(yù)先生成的胺訪問(wèn)計(jì)劃可靶能不如一開(kāi)爸始生成時(shí)那罷樣是最佳的襖。阿k。靶創(chuàng)建包和將按包與數(shù)據(jù)庫(kù)阿綁定時(shí),要隘對(duì)準(zhǔn)備靜態(tài)斑 SQL 板語(yǔ)句的人進(jìn)翱行授權(quán)。只瓣要執(zhí)行包的辦人擁有包的盎 EXEC敗UTE 權(quán)哎限,他就不背需要具備該般包中所引用瓣的數(shù)據(jù)庫(kù)對(duì)般象上的顯式敗的權(quán)限。m。捌動(dòng)態(tài) SQ澳L安 動(dòng)態(tài)(Dy把namic把 SQL)扳 語(yǔ)句是在俺運(yùn)行時(shí)動(dòng)態(tài)芭處理的。語(yǔ)昂句的結(jié)構(gòu)直澳到執(zhí)行應(yīng)用愛(ài)程序時(shí)才需氨要。藹D。爸注意,嵌入隘式 SQL皚 簡(jiǎn)介 中搬展示的例子昂 SQL 扮語(yǔ)句使用動(dòng)矮態(tài) SQL奧 來(lái) PR癌EPARE白 和 EX笆ECUTE哎 一條 D佰ELETE八

40、 語(yǔ)句。D艾ELETE耙 語(yǔ)句的文板本存儲(chǔ)在一板個(gè)宿主變量疤 host頒VarSt班mt 中。傲當(dāng)該語(yǔ)句 靶PREPA岸RE 好后頒,系統(tǒng)將生跋成該語(yǔ)句的藹一個(gè)可執(zhí)行爸格式,并將半其存儲(chǔ)在數(shù)凹據(jù)庫(kù)中的一擺個(gè)包里面。半一旦生成了扳數(shù)據(jù)訪問(wèn)計(jì)笆劃,準(zhǔn)備好笆的語(yǔ)句就可捌以 EXE爸CUTE 疤了。聽(tīng)起來(lái)扮好像有點(diǎn)熟板悉,不是嗎跋?是的:這拔兩個(gè)處理階叭段與靜態(tài) 瓣SQL 語(yǔ)案句正好是一隘樣的。惟一擺的不同點(diǎn)是斑,動(dòng)態(tài) S案QL 的 巴PREPA凹RE 和 暗EXECU半TE 都是把在運(yùn)行時(shí)進(jìn)奧行,而靜態(tài)鞍 SQL 霸在預(yù)編譯時(shí)拜準(zhǔn)備訪問(wèn)計(jì)凹劃,并將其氨保存在數(shù)據(jù)敗庫(kù)中。百i。拌動(dòng)態(tài) SQ佰L 語(yǔ)句必

41、奧須總是在執(zhí)隘行之前準(zhǔn)備埃好,不管是暗否有相同的按語(yǔ)句(相同疤的訪問(wèn)計(jì)劃吧)一次又一俺次地重復(fù)使埃用。為了最傲小化這些準(zhǔn)稗備工作的開(kāi)斑銷(xiāo),DB2背 提供了 昂包緩存(也挨叫 動(dòng)態(tài)查白詢緩存),埃用以將經(jīng)常昂使用的訪問(wèn)敗計(jì)劃保存在稗內(nèi)存中。包哀緩存(pa盎ckage埃 cach凹e)明顯地艾減少了重復(fù)爸的 SQL壩 準(zhǔn)備請(qǐng)求壩的代價(jià),然而發(fā)起和響八應(yīng)準(zhǔn)備請(qǐng)求啊的開(kāi)銷(xiāo)仍然斑存在。伴E。擺在準(zhǔn)備語(yǔ)句靶時(shí),總是使版用當(dāng)前數(shù)據(jù)笆庫(kù)統(tǒng)計(jì)信息背。因此,就版可以生成最昂佳的數(shù)據(jù)訪八問(wèn)路徑。哎2。吧SQL 語(yǔ)靶句的授權(quán)是阿在運(yùn)行時(shí)決藹定的。執(zhí)行白應(yīng)用程序的板人必須有適挨當(dāng)?shù)臋?quán)限來(lái)矮訪問(wèn)語(yǔ)句中案所引用的數(shù)巴據(jù)庫(kù)對(duì)

42、象。襖下一小節(jié)將罷更詳細(xì)地討埃論 DB2敖 權(quán)限。扒W。安全考慮 斑要預(yù)編譯嵌挨入式靜態(tài) 拔SQL 程矮序,用戶需拌要程序中所邦引用數(shù)據(jù)庫(kù)白對(duì)象的顯式礙的權(quán)限。由板于預(yù)編譯或氨 PREP白ARE 階瓣段會(huì)生成一哎個(gè)包,并將鞍其存儲(chǔ)在數(shù)藹據(jù)庫(kù)中,因搬此該用戶還唉必須擁有 扳BINDA百DD 權(quán)限班,以便添加白新的包到數(shù)版據(jù)庫(kù)中。為凹了執(zhí)行帶有伴靜態(tài) SQ板L 的程序骯,用戶只需扮具有相關(guān)包奧上的 EX哀ECUTE藹 權(quán)限。稗i。半編譯嵌入式岸動(dòng)態(tài) SQ巴L 程序的扳用戶也需要白 BIND邦A(yù)DD 權(quán)瓣限。這里不拔再需求其他挨的權(quán)限,因邦為動(dòng)態(tài) S昂QL 不是跋在編譯時(shí)準(zhǔn)稗備的。在程百序執(zhí)行時(shí),斑

43、用戶需要所白有必需的權(quán)澳限來(lái)發(fā)出每壩條 SQL傲 語(yǔ)句,同擺時(shí)還需要為澳嵌入式 S懊QL 程序板創(chuàng)建的包上皚的 EXE扳CUTE 半權(quán)限。挨x。拌下面的表總板結(jié)了預(yù)編譯霸和執(zhí)行一個(gè)皚只有靜態(tài) 骯SQL 或凹只有動(dòng)態(tài) 擺SQL 的傲程序所需的伴權(quán)限。 佰p。熬靜態(tài) SQ氨L 與動(dòng)態(tài)擺 SQL襖在下面的表瓣中,讓我們澳總結(jié)并詳細(xì)唉闡述我們所八學(xué)到的關(guān)于俺靜態(tài) SQ案L 和動(dòng)態(tài)霸 SQL 扒的知識(shí):白L。笆基于驅(qū)動(dòng)程礙序的 AP跋I哀基于驅(qū)動(dòng)程板序的 AP扒I巴雖然大多數(shù)俺供應(yīng)商都支扳持嵌入式 扳SQL 數(shù)巴據(jù)庫(kù)訪問(wèn),般但如果您想笆要使用同樣扳的源代碼,叭并將嵌入式鞍 SQL 埃應(yīng)用程序部靶署到多個(gè)

44、數(shù)翱據(jù)庫(kù)系統(tǒng)上昂,那么還需澳要一個(gè)額外扮的工作。必白須用不同供稗應(yīng)商的特定把的預(yù)編譯器柏預(yù)編譯程序瓣。還必須生唉成數(shù)據(jù)訪問(wèn)白計(jì)劃,并綁翱定到目標(biāo)數(shù)癌據(jù)庫(kù)。為了伴增加應(yīng)用程啊序的可移植搬性,還應(yīng)考百慮使用本節(jié)叭介紹的 基靶于驅(qū)動(dòng)程序八的解決方案。暗y。班基于驅(qū)動(dòng)程昂序的解決方吧案需要一個(gè)芭驅(qū)動(dòng)程序管巴理器(dr胺iver 凹manag愛(ài)er),這案是與應(yīng)用程拌序打交道的啊界面。驅(qū)動(dòng)襖程序管理器吧提供了一套襖工業(yè)標(biāo)準(zhǔn)的版應(yīng)用程序編拜程接口(A奧PI),用靶于訪問(wèn)數(shù)據(jù)頒源。應(yīng)用程襖序調(diào)用這些背 API,百然后被編譯,再與管理翱器的庫(kù)鏈接襖。因?yàn)轵?qū)動(dòng)礙程序遵從標(biāo)矮準(zhǔn),所以應(yīng)翱用程序可以霸很容易地使爸用

45、(或裝載邦)正確的驅(qū)版動(dòng)程序來(lái)訪耙問(wèn)不同供應(yīng)隘商的數(shù)據(jù)源拌。 靶7。扳在下面幾小藹節(jié)中,我們搬將看看 D扮B2 支持捌的一些 A啊PI。在本白系列后面的稗教程中,您瓣將更詳細(xì)地搬了解這些 礙API。奧X。背CLI 和愛(ài) ODBC板 API搬 扮DB2 C案all L耙evel 邦I(lǐng)nter氨face 襖(CLI)頒 是 IB辦M 對(duì) D瓣B2 數(shù)據(jù)佰庫(kù)服務(wù)器的案可調(diào)用 S把QL 接口百。CLI 壩是用于數(shù)據(jù)凹訪問(wèn)的一個(gè)案 C/C+隘+ 應(yīng)用程昂序編程接口扒(API)哀。您可以使拌用 DB2跋 CLI 耙開(kāi)發(fā)動(dòng)態(tài)應(yīng)半用程序,就版像使用嵌入唉式動(dòng)態(tài) S霸QL 語(yǔ)句白進(jìn)行開(kāi)發(fā)一挨樣。在這兩按種情況下

46、,巴SQL 語(yǔ)瓣句都是在運(yùn)白行時(shí)準(zhǔn)備和版處理的。嵌半入式動(dòng)態(tài) 靶SQL 要頒求有一個(gè)預(yù)埃編譯器,而捌 DB2 翱CLI 則唉沒(méi)有這種要板求。您只需俺編譯應(yīng)用程白序,并與 叭DB2 C擺LI 驅(qū)動(dòng)搬程序庫(kù)鏈接扳。安a。按DB2 C阿LI 是基靶于 Mic辦rosof霸t Ope百n Dat昂abase骯 Conn拌ectiv版ity (按ODBC)頒 和 X/皚Open 昂CLI 標(biāo)扳準(zhǔn)的。在 耙ODBC 唉環(huán)境中,應(yīng)礙用程序與數(shù)骯據(jù)庫(kù)服務(wù)器按之間的聯(lián)系疤要通過(guò) O板DBC 驅(qū)礙動(dòng)程序管理拌器。該管理器動(dòng)態(tài)地加邦載應(yīng)用程序霸需連接的數(shù)唉據(jù)庫(kù)服務(wù)器拔所需的驅(qū)動(dòng)板程序。OD佰BC 提供隘某些級(jí)別的八

47、功能支持,辦當(dāng)前的 D半B2 CL案I 遵從 拌ODBC 艾3.51。按X。哎要開(kāi)發(fā) D昂B2 CL辦I 應(yīng)用程敗序,需要 暗DB2 A絆pplic版ation辦 Deve柏lopme頒nt Cl耙ient。捌它包括編譯胺和鏈接 C唉LI 應(yīng)用皚程序時(shí)所有拔必需的頭文挨件和庫(kù)。而唉要開(kāi)發(fā) O癌DBC 應(yīng)哎用程序,則吧需要 Mi頒croso邦ft 提供岸的一個(gè) O爸DBC D擺evelo敗pers背 Soft芭ware 搬Kit。敖m。盎下面的圖對(duì)隘 DB2 板CLI 與澳 ODBC鞍 環(huán)境作了耙快速的比較矮。案Q。OLE D藹B 與 A挨DO.NE礙T API拌 懊Micro疤soft 哎Ob

48、jec凹t Lin盎k Emb白edded背 Data跋base 背(OLE 隘DB) 是稗一套接口,扳它為應(yīng)用程芭序提供了對(duì)阿存儲(chǔ)在不同愛(ài)信息源上的哎數(shù)據(jù)的統(tǒng)一氨訪問(wèn),這些百不同的信息擺源包括關(guān)系跋數(shù)據(jù)源和非昂關(guān)系數(shù)據(jù)源翱。OLE 佰DB 架構(gòu)瓣由 OLE擺 DB 提把供者和 O扮LE DB叭 消費(fèi)者組半成。DB2氨 同時(shí)支持班這兩種角色罷。為了使 盎DB2 能半夠充當(dāng) O捌LE DB斑 提供者,藹必須要有 吧IBM O癌LE DB笆 Prov壩ider 巴for D昂B2。這是版一個(gè)本地驅(qū)巴動(dòng)程序,支矮持通過(guò) O胺LE 接口按提取或查詢班 DB2 搬數(shù)據(jù)。佰g。把下面的圖展拌示了一個(gè)可笆作

49、為 OL捌E DB 芭消費(fèi)者的 耙DB2 數(shù)哎據(jù)庫(kù),它可案以訪問(wèn)來(lái)自襖任何遵從 班OLE D哎B 的數(shù)據(jù)俺源(例如一半個(gè)電子表格艾)的數(shù)據(jù)。霸同樣的 D傲B2 服務(wù)白器也可以作熬為一個(gè) O案LE DB扮 提供者,笆為 OLE氨 DB 消捌費(fèi)者提供數(shù)百據(jù)。安O。愛(ài)Activ斑eX Da八ta Ob案ject 靶.NET 跋(ADO.鞍NET) 拜是 Mic背rosof半t 提供的啊另一種數(shù)據(jù)挨訪問(wèn)應(yīng)用程半序接口。它扮是一種新的半數(shù)據(jù)訪問(wèn)模凹型,將其前哎任(ADO挨)最好的特藹性與傳統(tǒng)的傲數(shù)據(jù)庫(kù)訪問(wèn)斑相結(jié)合,集罷成了 XM扮L 支持,隘是一種斷開(kāi)柏連接的(d吧iscon暗necte版d)數(shù)據(jù)架皚構(gòu)

50、。有三種辦方法從一個(gè)鞍 .NET板 應(yīng)用程序翱連接到一個(gè)岸 DB2 鞍數(shù)據(jù)庫(kù),如吧下圖所示。凹 安I。辦JDBC 班和 SQL埃J API傲 挨至今為止,凹Java 敗平臺(tái)已經(jīng)享氨譽(yù)多時(shí),但唉仍有很多人皚正在致力于盎擴(kuò)展其功能翱和提高其性翱能。訪問(wèn)和叭操縱 DB皚2 的 J罷ava 程襖序可以使用瓣 Java爸 Data爸base 凹Conne邦ctivi岸ty (J頒DBC) 凹API,以盎及 Emb昂edded跋 SQL 啊for J愛(ài)ava (巴SQLJ)稗 標(biāo)準(zhǔn)。這癌兩個(gè)選項(xiàng)都白是供應(yīng)商無(wú)班關(guān)的 SQ敗L 接口,扮通過(guò)標(biāo)準(zhǔn)化把的 Jav拌a 方法為疤應(yīng)用程序提隘供數(shù)據(jù)訪問(wèn)艾。背y。岸J

51、DBC 斑是用于關(guān)系哀數(shù)據(jù)庫(kù)訪問(wèn)佰的 實(shí)際上伴的 標(biāo)準(zhǔn) 胺Java 邦A(yù)PI,這般種訪問(wèn)通過(guò)搬強(qiáng)大的面向癌對(duì)象的接口捌,使用動(dòng)態(tài)澳 SQL。佰JDBC 骯將動(dòng)態(tài) S骯QL 傳遞霸給 DB2俺 附帶的一氨個(gè) JDB背C 驅(qū)動(dòng)程版序。DB2笆 通過(guò) J班DBC A阿PI 執(zhí)行白 SQL 辦語(yǔ)句,結(jié)果白被傳回給 哀Java 板代碼。JD氨BC 類(lèi)似笆于 DB2藹 CLI,埃您無(wú)需預(yù)編搬譯或綁定 皚JDBC 唉程序,因?yàn)榘?JDBC隘 使用動(dòng)態(tài)藹 SQL。懊Z。半而 SQL八J 程序則俺包含靜態(tài)嵌把入式 SQ安L 語(yǔ)句。斑準(zhǔn)備一個(gè) 班SQLJ 扮程序時(shí)需要熬通過(guò)類(lèi)似于擺預(yù)編譯和綁啊定的步驟。拔在編譯 S熬QLJ 源熬文件之前,稗必須用 S扮QLJ 翻八譯器對(duì)其進(jìn)拌行翻譯,以俺創(chuàng)建本地 唉Java 捌源代碼。完俺成翻譯后,傲需要使用 挨DB2 f奧or Ja襖va pr柏ofile案 cust霸omize拌r (db矮2prof胺c) 創(chuàng)建扮 DB2 版包。跋w。爸DB2 遺拜留的基于C癌LI 的 半JDBC 皚驅(qū)動(dòng)程序啊 骯根據(jù) Ja扮va 2 扳Platf搬orm, 愛(ài)Enter瓣prise吧 Edit拜ion (笆J2EE)傲 規(guī)范,用岸于獲得數(shù)據(jù)昂訪問(wèn)的 J叭ava 方安法和接口可叭以打包成 伴JDBC 疤驅(qū)動(dòng)程

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論