




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、把DB2數據扒庫對象叭基本數據庫扮對象 鞍數據庫對象挨是一個數據把庫的構造塊頒(buil隘ding 拌block啊)。DB2懊 提供了不巴同類型的數安據庫對象來背存儲和表示把不同信息。捌通過使用數據定義語言柏(DDL)澳,可以創(chuàng)建把、修改和刪班除數據庫對霸象。要操縱唉數據庫對象懊,可以使用按數據操縱語矮言(DML埃),例如 疤SELEC稗T、UPD百ATE、I邦NSERT芭 和 SE俺LECT 骯語句。常用白的數據庫對辦象有:暗x。表 瓣用戶定義數傲據類型 約束 視圖 索引 班除了 Fa吧mily 隘Funda愛menta版ls 教程板里介紹的一扳些數據庫對拔象外,還有盎一些其他的霸對象,很多
2、阿開發(fā)人員在唉開發(fā) DB絆2 應用程阿序時會發(fā)現半這些對象比啊較有用。本叭節(jié)我們將介拌紹這些對象搬。八v。柏在繼續(xù)之前辦,有一點要擺注意:在下背面看到的一藹些例子中,礙對象名稱是阿以小寫形式哎指定的。無哀論 DB2懊 在哪個平柏臺上運行,跋它總是以大扳寫形式存儲絆名稱,除非埃標識符的名白稱以雙引號哀()括柏起來了。凹R。版例如,下面澳的語句創(chuàng)建邦一個名為 盎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)。別名斑也可以作為柏另一個別名盎的昵稱。與澳這些對象一叭樣,別名也俺可以被創(chuàng)建礙或刪除,可版以有與之相柏關的注釋。傲下面是 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、 語句頒比較簡單。稗可以在源對伴象所在的同班一模式中創(chuàng)敖建別名(如捌第 1 行艾),或者也澳可以全限定霸別名(如第叭 2 行)骯。為了與 骯DB2 f扒or zS板eries敗 兼容,使爸用關鍵字 把SYNON傲YM 代替般 ALIA瓣S 也是合俺法的(如第擺 3 行)霸。八A。拔使用別名時跋無需專門的背授權或權限稗。不過,需八要獲得與別捌名所引用的礙底層對象相頒關的授權。背關于數據庫安對象權限的版完整清單,皚請參考 D八B2 DB壩A 認證教板程 Ser頒ver m跋anage哀ment(絆請參閱 參挨考資料)。懊e。胺前面已提到敖,我們也可癌以為 昵稱板 創(chuàng)建別名澳。昵稱是引捌用位于聯邦伴
5、系統(tǒng)上的數稗據表或視圖班的數據庫對耙象。聯邦數隘據庫支持超愛出了本教程藹的范圍。在搬本教程系列藹的第 2 版部分,Da扮ta ma耙nipul襖ation阿 ,我們將哀學習更多有翱關聯邦系統(tǒng)的知識。隘M。拜要為別名添辦加注釋,可翱以發(fā)出以下暗語句:澳巴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。后續(xù)柏值的生成是搬由 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 隘來規(guī)定序列挨值是否應該安循環(huán)。注意鞍,如果 C半YCL
9、E 半生效,則序骯列就可以生奧成重復的值敗。襖j。班CACHE埃 選項允許隘 DB2 艾將一些預先俺分配好空間澳的值保留在暗內存中,以襖提高性能。埃CACHE斑 20 是俺缺省的行為版。關于這個艾選項有一點癌要謹記:如壩果在所有緩絆存的值被使襖用之前關閉捌 DB2,頒那么任何緩背存的值和未白使用的值都稗將被丟棄。背當 DB2斑 重新啟動哎時,又會生壩成和緩存下扒一塊的值,艾從而造成值拜之間的不連哎續(xù),即值之巴間存在間隔氨。如果應用柏程序不允許埃值之間有間背隔,可以考八慮使用 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胺生成和獲取霸序列值 搬序列是一種澳數據庫對象爸,因此對序哀列的訪問也埃是由權限來拌控制的。缺暗省情況下,盎只有序列的胺創(chuàng)建者,即壩 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,胺則在執(zhí)行上耙述語句之后盎,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、表。如果癌兩個應用程般序用相同的拜名字創(chuàng)建了稗一個臨時表盎,該臨時表版的每個實例頒仍然是惟一氨的。因而,拔完全不必擔百心出現臨時疤數據沖突的哎情況。由于白臨時表只允捌許單連接(愛singl澳e-con稗necti稗on)訪問絆,因此這里白無需使用鎖敖。這正是臨皚時表的一個凹主要的性能癌優(yōu)勢。把U。矮聲明臨時表懊 敖要聲明一個頒臨時表,必吧須存在一個背 USER傲 臨時表空襖間(不同于背 SYST癌EM 臨時奧表空間),傲用以存儲臨奧時表的定義斑和內容。S邦YSTEM笆 臨時表空柏間只是 D癌B2 在內笆部用來執(zhí)行辦諸如排序之鞍類操作的。吧下面這條簡爸單的語句將靶創(chuàng)建一個用班戶臨時表空傲間。按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 骯子句規(guī)定在板每次執(zhí)行 扒COMMI跋T 操作時版刪除臨時表吧的內容。在藹 DB2 隘V8 中,耙可以選擇記壩錄對臨時表俺的更改,以罷便回滾。這板個例子規(guī)定芭對該表的更啊改是 NO拔T LOG把GED。這斑意味著對該半表的任何操佰作,包括創(chuàng)翱建以及更改岸,都不做日拌志記錄。如疤果在一個工作單位內創(chuàng)八建表,然后拌回滾,則臨擺時表將被刪昂除。另一方翱面,如果在絆此工作單位骯內刪除該表邦,則該表在安恢復時將沒霸有任何行。把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百 子句表明奧,在執(zhí)行 隘COMMI捌T 語句時埃,該臨時表柏中的所有行拌都將被保留邦。因此,這擺些行就可以班在下一次事艾務中用于進白一步的處理。岸A。昂在同一次會扳話中使用相頒同的名稱聲稗明另一個臨隘時表之前,鞍首先必須刪氨除該臨時表半??梢燥@式耙地刪除該表班,也可以像岸這里一樣使熬用 WIT巴H REP盎LACE 拔選項。如果鞍使用了 W襖ITH R骯EPLAC佰E 選項,叭DB2 將藹隱式地刪除唉所有數據,版刪除該臨時伴表,并用新敗的定義重新背創(chuàng)建該臨時扳表。板U。矮如果使用了白 連接池(捌conne柏ction敖 poo
20、l白ing),襖WITH 案REPLA翱CE 選項用起來就十百分方便了。案連接池是用般于重用數據敗庫連接的一挨種機制,這唉樣就不必完邦全按照要求班分配和回收壩資源。這些霸操作的開銷板都是相當大岸的,尤其是版在有大量執(zhí)奧行很短事務氨的連接時,案更是如此。埃由于沒有釋靶放連接,先俺前使用的臨襖時表就可能敗得不到清除愛。下一個使傲用該連接的氨應用程序就叭可能使用上癌一次執(zhí)行時搬遺留下來的白數據。因此氨,使用 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 連接到翱一個數據庫耙,并創(chuàng)建表佰 T1,則 DB2 半將創(chuàng)建一個白名為 db板2admi按n.T1 壩的表。此后疤所有引用非皚全限定(u案nqual頒ified芭)表名 T搬1 的 S芭QL 語句
22、靶都解析為 凹db2ad把min.T頒1。矮q。暗DB2 專胺用寄存器:藹CU唉RRENT襖 SCHE柏MA瓣 澳您在進行自邦己的數據庫埃工作時可能案已經發(fā)現,白用同為對象絆的模式的用邦戶 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應用艾程序開發(fā)數翱據庫對象例程 靶在本節(jié)中,跋我們將介紹俺更多類型的般數據庫對象唉。這些對象骯統(tǒng)統(tǒng)都叫做拌 例程(r絆outine)。從功芭能上分,主半要有三種例霸程:存儲過隘程(sto礙red p把roced邦ure)、頒函數(fu稗nctio氨n)和方法癌(meth般od)。(暗要了解這些礙類型之間的版更多不同之骯處,請參閱背 存儲過程罷、函數和
24、方氨法。)稗9。柏例程是封裝澳了與某一特疤定任務相關鞍的編程和數安據庫邏輯的昂數據庫對象背。有效地使隘用例程可以邦簡化應用程靶序的代碼,敖并增加代碼爸的可重用性耙。例如,如岸果將某種業(yè)扒務邏輯封裝安在一個例程礙中,那么對氨此業(yè)務規(guī)則扒的更改只會爸影響那個特昂定的例程。拌從而可最小瓣化對應用程叭序的更改。跋6。案例程是在數耙據庫服務器暗上定義和處爸理的。這樣跋就允許應用霸程序利用數扒據庫服務器伴的能力,從敖而減少客戶骯機上的處理扳負載。霸2。愛通常,復雜板的業(yè)務邏輯爸需要多條 鞍SQL 語捌句。這些語絆句要分別地翱從客戶機發(fā)熬送到服務器岸,如果數據暗庫活動很多霸,就會產生皚大量的網絡百傳輸。如果
25、疤將這些操作胺放在一個例翱程中,那么鞍客戶機和服芭務器之間的奧網絡傳輸就埃會大大減少辦,從而可以藹提高應用程骯序的總體性笆能。扮X。吧加強安全的能力是使用矮例程的另一愛個關鍵優(yōu)勢胺。例程可用鞍于屏蔽對底白層數據庫對爸象的直接訪皚問。用 E骯XECUT佰E 權限調傲用一個例程絆就足夠了,白無需擁有訪頒問底層數據敗庫對象的顯按式的權限。板0。稗例程的不同八實現岸 頒例程有幾種搬可能的實現霸:版內置(bu奧ilt-i吧n)例程是耙 DB2 白系統(tǒng)附帶的斑。這些例程皚定義在一個辦系統(tǒng)模式中澳,例如 S頒YSIBM白、SYSP扳ROC、S爸YSFUN扮 和 SY案STOOL昂S。 襖9。般Sourc氨e
26、d 例程皚只適用于函唉數。sou拔rced 背例程復制另啊一個函數的傲語義。 搬w。唉外部(ex八terna罷l)例程是熬用一種外部芭的編程語言伴實現的。對澳于 DB2氨 V8.1傲,可以用下昂列受支持的襖語言開發(fā)例柏程: 捌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安 語句。存昂儲過程可以俺作為對客戶盎機應用程序哀或其他例程版的子例程擴安展。存儲過白程的執(zhí)行和挨管理是由一骯個關系數據柏庫管理系統(tǒng)皚(RDBM熬S)控制的奧。矮K。埃函數 是可艾以自定義的擺 S
28、QL 愛擴展??梢园辉?SQL奧 語句(例霸如一個 s氨elect昂-list捌 或 FR扳OM 子句版)中調用函柏數。有四種斑類型的函數靶:聚合(a矮ggreg暗ate)函班數、標量(愛scala班r)函數、叭行(row捌)函數以及昂 表(table)函笆數。 佰n。捌存儲過程通柏常用于封裝辦復雜的應用愛程序邏輯,拜以及執(zhí)行開芭銷較大的數安據庫操作,八例如多表聯霸結和游標操盎作。而函數挨 半佰 尤其是 懊SQL 函愛數 胺敖 通常包含襖更簡單的操案作。編寫在胺 SQL 拌函數中的語礙句將展開到懊引用它們的扒 SQL 襖語句中,與稗這些 SQ哎L 語句一百起執(zhí)行。這案導致這些語安句在執(zhí)行時伴動
29、態(tài)編譯。挨如果一條 笆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絆缺省路徑包爸含三個系統(tǒng)翱模式,后面板跟有連接到熬數據庫的當疤前用戶。例捌如:埃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 為絆開發(fā)人員提俺供了不同的凹編程方法來扮編寫應用程拔序。最直接伴的一種方法皚是嵌入式 疤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 頒語句稍微有熬些不同,這吧里必須指定懊語句將來執(zhí)挨行時所在的絆連接上下文背。下面是一白個例子:皚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 篇教程拌中,您將了壩解到更多關般于程序預編隘譯和實際代柏碼開發(fā)的知瓣識。巴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é)盎中,我們演扳示了兩種不耙同類型的嵌唉入式 SQ昂L 語句:伴靜態(tài)嵌入式八 SQL 版和動態(tài)嵌入愛式 SQL傲。稗u。壩這個例子中藹的 SEL扮ECT 語霸句說明了靜半態(tài) SQL班 的使用。哎編寫靜態(tài) 扒SQL 時俺,必
38、須指定百完整的語句捌。表名、列矮名以及所引襖用的數據類百型都是已知背的。惟一可半以在運行時霸指定的信息扒是使用宿主跋變量的 S搬QL 語句礙的 WHE瓣RE 子句百中的值。巴2。拔編譯靜態(tài) 靶SQL 語皚句(或者,鞍用 DB2唉 術語更確敗切地說,準稗備好的(p柏repar斑ed)SQ矮L 語句)靶時,將為其絆生成數據訪邦問計劃,并矮存儲在數據霸庫中的一個扒包里面。當百調用包含該艾語句的應用癌程序時,這耙個包將被執(zhí)耙行。由于在扳運行時不需把要編譯語句胺,因此執(zhí)行背靜態(tài) SQ半L 時沒用藹編譯開銷。白b。盎在準備語句埃時,DB2斑 使用數據皚庫統(tǒng)計信息愛和配置參數昂來估計和獲熬得訪問計劃叭。如果
39、數據霸庫統(tǒng)計信息白有變化,則捌預先生成的胺訪問計劃可靶能不如一開爸始生成時那罷樣是最佳的襖。阿k。靶創(chuàng)建包和將按包與數據庫阿綁定時,要隘對準備靜態(tài)斑 SQL 板語句的人進翱行授權。只瓣要執(zhí)行包的辦人擁有包的盎 EXEC敗UTE 權哎限,他就不背需要具備該般包中所引用瓣的數據庫對般象上的顯式敗的權限。m。捌動態(tài) SQ澳L安 動態(tài)(Dy把namic把 SQL)扳 語句是在俺運行時動態(tài)芭處理的。語昂句的結構直澳到執(zhí)行應用愛程序時才需氨要。藹D。爸注意,嵌入隘式 SQL皚 簡介 中搬展示的例子昂 SQL 扮語句使用動矮態(tài) SQL奧 來 PR癌EPARE白 和 EX笆ECUTE哎 一條 D佰ELETE八
40、 語句。D艾ELETE耙 語句的文板本存儲在一板個宿主變量疤 host頒VarSt班mt 中。傲當該語句 靶PREPA岸RE 好后頒,系統(tǒng)將生跋成該語句的藹一個可執(zhí)行爸格式,并將半其存儲在數凹據庫中的一擺個包里面。半一旦生成了扳數據訪問計笆劃,準備好笆的語句就可捌以 EXE爸CUTE 疤了。聽起來扮好像有點熟板悉,不是嗎跋?是的:這拔兩個處理階叭段與靜態(tài) 瓣SQL 語案句正好是一隘樣的。惟一擺的不同點是斑,動態(tài) S案QL 的 巴PREPA凹RE 和 暗EXECU半TE 都是把在運行時進奧行,而靜態(tài)鞍 SQL 霸在預編譯時拜準備訪問計凹劃,并將其氨保存在數據敗庫中。百i。拌動態(tài) SQ佰L 語句必
41、奧須總是在執(zhí)隘行之前準備埃好,不管是暗否有相同的按語句(相同疤的訪問計劃吧)一次又一俺次地重復使埃用。為了最傲小化這些準稗備工作的開斑銷,DB2背 提供了 昂包緩存(也挨叫 動態(tài)查白詢緩存),埃用以將經常昂使用的訪問敗計劃保存在稗內存中。包哀緩存(pa盎ckage埃 cach凹e)明顯地艾減少了重復爸的 SQL壩 準備請求壩的代價,然而發(fā)起和響八應準備請求啊的開銷仍然斑存在。伴E。擺在準備語句靶時,總是使版用當前數據笆庫統(tǒng)計信息背。因此,就版可以生成最昂佳的數據訪八問路徑。哎2。吧SQL 語靶句的授權是阿在運行時決藹定的。執(zhí)行白應用程序的板人必須有適挨當的權限來矮訪問語句中案所引用的數巴據庫對
42、象。襖下一小節(jié)將罷更詳細地討埃論 DB2敖 權限。扒W。安全考慮 斑要預編譯嵌挨入式靜態(tài) 拔SQL 程矮序,用戶需拌要程序中所邦引用數據庫白對象的顯式礙的權限。由板于預編譯或氨 PREP白ARE 階瓣段會生成一哎個包,并將鞍其存儲在數藹據庫中,因搬此該用戶還唉必須擁有 扳BINDA百DD 權限班,以便添加白新的包到數版據庫中。為凹了執(zhí)行帶有伴靜態(tài) SQ板L 的程序骯,用戶只需扮具有相關包奧上的 EX哀ECUTE藹 權限。稗i。半編譯嵌入式岸動態(tài) SQ巴L 程序的扳用戶也需要白 BIND邦ADD 權瓣限。這里不拔再需求其他挨的權限,因邦為動態(tài) S昂QL 不是跋在編譯時準稗備的。在程百序執(zhí)行時,斑
43、用戶需要所白有必需的權澳限來發(fā)出每壩條 SQL傲 語句,同擺時還需要為澳嵌入式 S懊QL 程序板創(chuàng)建的包上皚的 EXE扳CUTE 半權限。挨x。拌下面的表總板結了預編譯霸和執(zhí)行一個皚只有靜態(tài) 骯SQL 或凹只有動態(tài) 擺SQL 的傲程序所需的伴權限。 佰p。熬靜態(tài) SQ氨L 與動態(tài)擺 SQL襖在下面的表瓣中,讓我們澳總結并詳細唉闡述我們所八學到的關于俺靜態(tài) SQ案L 和動態(tài)霸 SQL 扒的知識:白L。笆基于驅動程礙序的 AP跋I哀基于驅動程板序的 AP扒I巴雖然大多數俺供應商都支扳持嵌入式 扳SQL 數巴據庫訪問,般但如果您想笆要使用同樣扳的源代碼,叭并將嵌入式鞍 SQL 埃應用程序部靶署到多個
44、數翱據庫系統(tǒng)上昂,那么還需澳要一個額外扮的工作。必白須用不同供稗應商的特定把的預編譯器柏預編譯程序瓣。還必須生唉成數據訪問白計劃,并綁翱定到目標數癌據庫。為了伴增加應用程啊序的可移植搬性,還應考百慮使用本節(jié)叭介紹的 基靶于驅動程序八的解決方案。暗y。班基于驅動程昂序的解決方吧案需要一個芭驅動程序管巴理器(dr胺iver 凹manag愛er),這案是與應用程拌序打交道的啊界面。驅動襖程序管理器吧提供了一套襖工業(yè)標準的版應用程序編拜程接口(A奧PI),用靶于訪問數據頒源。應用程襖序調用這些背 API,百然后被編譯,再與管理翱器的庫鏈接襖。因為驅動礙程序遵從標矮準,所以應翱用程序可以霸很容易地使爸用
45、(或裝載邦)正確的驅版動程序來訪耙問不同供應隘商的數據源拌。 靶7。扳在下面幾小藹節(jié)中,我們搬將看看 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 耙開發(fā)動態(tài)應半用程序,就版像使用嵌入唉式動態(tài) S霸QL 語句白進行開發(fā)一挨樣。在這兩按種情況下
46、,巴SQL 語瓣句都是在運白行時準備和版處理的。嵌半入式動態(tài) 靶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 唉環(huán)境中,應礙用程序與數骯據庫服務器按之間的聯系疤要通過 O板DBC 驅礙動程序管理拌器。該管理器動態(tài)地加邦載應用程序霸需連接的數唉據庫服務器拔所需的驅動板程序。OD佰BC 提供隘某些級別的八
47、功能支持,辦當前的 D半B2 CL案I 遵從 拌ODBC 艾3.51。按X。哎要開發(fā) D昂B2 CL辦I 應用程敗序,需要 暗DB2 A絆pplic版ation辦 Deve柏lopme頒nt Cl耙ient。捌它包括編譯胺和鏈接 C唉LI 應用皚程序時所有拔必需的頭文挨件和庫。而唉要開發(fā) O癌DBC 應哎用程序,則吧需要 Mi頒croso邦ft 提供岸的一個 O爸DBC D擺evelo敗pers背 Soft芭ware 搬Kit。敖m。盎下面的圖對隘 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) 是稗一套接口,扳它為應用程芭序提供了對阿存儲在不同愛信息源上的哎數據的統(tǒng)一氨訪問,這些百不同的信息擺源包括關系跋數據源和非昂關系數據源翱。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挨)最好的特藹性與傳統(tǒng)的傲數據庫訪問斑相結合,集罷成了 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,這般種訪問通過搬強大的面向癌對象的接口捌,使用動態(tài)澳 SQL。佰JDBC 骯將動態(tài) S骯QL 傳遞霸給 DB2俺 附帶的一氨個 JDB背C 驅動程版序。DB2笆 通過 J班DBC A阿PI 執(zhí)行白 SQL 辦語句,結果白被傳回給 哀Java 板代碼。JD氨BC 類似笆于 DB2藹 CLI,埃您無需預編搬譯或綁定 皚JDBC 唉程序,因為隘 JDBC隘 使用動態(tài)藹 SQL。懊Z。半而 SQL八J 程序則俺包含靜態(tài)嵌把入式 SQ安L 語句。斑準備一個 班SQLJ 扮程序時需要熬通過類似于擺預編譯和綁啊定的步驟。拔在編譯 S熬QLJ 源熬文件之前,稗必須用 S扮QLJ 翻八譯器對其進拌行翻譯,以俺創(chuàng)建本地 唉Java 捌源代碼。完俺成翻譯后,傲需要使用 挨DB2 f奧or Ja襖va pr柏ofile案 cust霸omize拌r (db矮2prof胺c) 創(chuàng)建扮 DB2 版包。跋w。爸DB2 遺拜留的基于C癌LI 的 半JDBC 皚驅動程序啊 骯根據 Ja扮va 2 扳Platf搬orm, 愛Enter瓣prise吧 Edit拜ion (笆J2EE)傲 規(guī)范,用岸于獲得數據昂訪問的 J叭ava 方安法和接口可叭以打包成 伴JDBC 疤驅動程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 寵物營養(yǎng)師在寵物食品市場中的作用試題及答案
- 食品檢測儀器使用考試試題及答案
- 小學一年級語文考試最佳試題及答案
- 寵物營養(yǎng)師行業(yè)人才培養(yǎng)目標與考試的關聯性與試題及答案
- 殯葬招聘考試題目及答案
- 口腔護理目的及注意事項
- 2024年小學六年級語文目標測驗試題及答案
- 2024年汽車維修工考試時間安排探討試題及答案
- 2024年汽車維修工發(fā)動機運轉異常分析試題及答案
- 2024年車主與維修工的溝通技巧試題及答案
- 建設工程安全生產管理條例試題
- 外貿業(yè)務員在市場拓展中的職責
- 人教A版高中數學必修第二冊8.4.1平面【課件】
- 2025年鄭州衛(wèi)生健康職業(yè)學院單招職業(yè)適應性測試題庫帶答案
- 2025年河南應用技術職業(yè)學院單招職業(yè)適應性測試題庫必考題
- 2025年鄭州衛(wèi)生健康職業(yè)學院單招職業(yè)適應性測試題庫必考題
- 農業(yè)產業(yè)鏈管理手冊
- 大學生打網游情況調查
- 2025年網信部筆試試題及答案
- 2025教科版三年級科學下冊全冊教案【含反思】
- 2025年中國特殊熱電偶市場調查研究報告
評論
0/150
提交評論