版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)庫(kù)培訓(xùn)教程數(shù)據(jù)庫(kù)培訓(xùn)教程第1頁(yè)/共80頁(yè)隨著計(jì)算機(jī)技術(shù)、通信技術(shù)和網(wǎng)絡(luò)技術(shù)的發(fā)展,人類社會(huì)已經(jīng)進(jìn)入了信息化時(shí)代。信息資源已經(jīng)成為最重要和寶貴的資源之一,確保信息資源的存儲(chǔ),以及其有效性就變得非常重要,而保存信息的核心就是數(shù)據(jù)庫(kù)技術(shù)。對(duì)于數(shù)據(jù)庫(kù)技術(shù),當(dāng)前應(yīng)用最為廣泛的是關(guān)系型數(shù)據(jù)庫(kù),而在關(guān)系型數(shù)據(jù)庫(kù)中,Oracle公司推出的Oracle數(shù)據(jù)庫(kù)是其中佼佼者。本書(shū)所基于的數(shù)據(jù)庫(kù)為Oracle 11g 。第2頁(yè)/共80頁(yè)關(guān)系數(shù)據(jù)庫(kù)的邏輯模型關(guān)系數(shù)據(jù)庫(kù)的設(shè)計(jì)規(guī)范理解什么是網(wǎng)格技術(shù)了解Oracle的應(yīng)用結(jié)構(gòu)了解Oracle的體系結(jié)構(gòu)第3頁(yè)/共80頁(yè) 關(guān)系數(shù)據(jù)庫(kù)具有堅(jiān)實(shí)的理論基礎(chǔ),這一理論有助于關(guān)系數(shù)據(jù)
2、庫(kù)的設(shè)計(jì)和用戶對(duì)數(shù)據(jù)庫(kù)信息需求的有效處理。它涉及的內(nèi)容有關(guān)模式的基本知識(shí)、關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言SQL,以及關(guān)系數(shù)據(jù)理論,在本節(jié)中將對(duì)這些做簡(jiǎn)要的介紹。第4頁(yè)/共80頁(yè) 數(shù)據(jù)庫(kù)系統(tǒng)是指一個(gè)計(jì)算機(jī)存儲(chǔ)記錄的系統(tǒng),它需要特定的軟件和一系列硬件支持;并且利用數(shù)據(jù)庫(kù)系統(tǒng)能夠存儲(chǔ)大量的數(shù)據(jù)記錄,支持用戶進(jìn)行檢索和更新所需的信息。數(shù)據(jù)庫(kù)系統(tǒng)通常在企業(yè)應(yīng)用或科學(xué)研究中用于對(duì)大量數(shù)據(jù)進(jìn)行存儲(chǔ)和分析,從而為實(shí)際應(yīng)用提供幫助信息。第5頁(yè)/共80頁(yè)在關(guān)系數(shù)據(jù)庫(kù)的設(shè)計(jì)階段,需要為它建立邏輯模型。關(guān)系數(shù)據(jù)庫(kù)的邏輯模型可以通過(guò)實(shí)體和關(guān)系組成的圖來(lái)表示,這種圖表稱為“E-R圖”,使用E-R圖表示的邏輯模型被稱為“ER模型”。
3、一個(gè)典型的ER模型由如下三部分組成:實(shí)體、聯(lián)系和屬性。第6頁(yè)/共80頁(yè) 在關(guān)系數(shù)據(jù)庫(kù)中,為了保證構(gòu)造的表(關(guān)系)既能準(zhǔn)確地反應(yīng)現(xiàn)實(shí)世界,又有利于應(yīng)用和具體的操作,還需要對(duì)構(gòu)造的表進(jìn)行規(guī)范化,常用的規(guī)范化方法就是對(duì)關(guān)系應(yīng)用不同的設(shè)計(jì)范式。在關(guān)系數(shù)據(jù)庫(kù)中,在構(gòu)造數(shù)據(jù)庫(kù)時(shí)必須遵循一定的規(guī)則,這種規(guī)則就是范式。 第7頁(yè)/共80頁(yè) Oracle數(shù)據(jù)庫(kù)是Oracle公司出品的十分優(yōu)秀的DBMS,當(dāng)前Oracle DBMS以及相關(guān)的產(chǎn)品幾乎在全世界各個(gè)工業(yè)領(lǐng)域中都有應(yīng)用。無(wú)論是大型企業(yè)中的數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用,還是中小型的聯(lián)機(jī)事務(wù)處理業(yè)務(wù),都可以找到成功使用Oracle數(shù)據(jù)庫(kù)系統(tǒng)的典范。到目前為止,11g是Orac
4、le數(shù)據(jù)庫(kù)的最新版本,它是在10g的基礎(chǔ)上對(duì)企業(yè)級(jí)網(wǎng)格計(jì)算進(jìn)行了擴(kuò)展,提供了眾多特性支持企業(yè)網(wǎng)格計(jì)算。第8頁(yè)/共80頁(yè) 超級(jí)計(jì)算機(jī)作為復(fù)雜科學(xué)計(jì)算領(lǐng)域的主宰,以其強(qiáng)大的處理能力著稱。但以超級(jí)計(jì)算機(jī)為中心的計(jì)算模式存在明顯的不足,由于它的造價(jià)極高,通常只有一些國(guó)家級(jí)的部門,如航天、氣象等部門才有能力配置。而隨著人們?nèi)粘9ぷ饔龅降纳虡I(yè)計(jì)算越來(lái)越復(fù)雜,人們?cè)絹?lái)越需要數(shù)據(jù)處理能力更強(qiáng)大的計(jì)算機(jī)。于是,人們開(kāi)始尋找一種造價(jià)低廉而數(shù)據(jù)處理能力超強(qiáng)的計(jì)算模式,最終找到了答案網(wǎng)格計(jì)算Grid Computing。第9頁(yè)/共80頁(yè) Oracle 10g/11g中的g代表網(wǎng)格計(jì)算,Oracle數(shù)據(jù)庫(kù)作為第一個(gè)為企
5、業(yè)級(jí)網(wǎng)格計(jì)算而設(shè)計(jì)的數(shù)據(jù)庫(kù),為管理信息和應(yīng)用提供了最靈活的、成本最低的方式。例如,通過(guò)Oracle網(wǎng)格計(jì)算,可以在幾個(gè)互聯(lián)的數(shù)據(jù)庫(kù)服務(wù)器網(wǎng)格上運(yùn)行不同的應(yīng)用。當(dāng)應(yīng)用需求增加時(shí),數(shù)據(jù)庫(kù)管理員能夠自動(dòng)為應(yīng)用提供更多的服務(wù)器支持。網(wǎng)格計(jì)算使用最高端的負(fù)載管理機(jī)制,使得應(yīng)用能夠共享多個(gè)服務(wù)器上的資源,從而提高數(shù)據(jù)處理能力,減少對(duì)硬件資源的需求,節(jié)省企業(yè)成本。第10頁(yè)/共80頁(yè) 在安裝、部署Oracle 11g數(shù)據(jù)庫(kù)時(shí),需要根據(jù)硬件平臺(tái)和操作系統(tǒng)的不同采取不同的結(jié)構(gòu),下面介紹幾種常用的應(yīng)用結(jié)構(gòu)。第11頁(yè)/共80頁(yè) 在安裝、部署Oracle 11g數(shù)據(jù)庫(kù)時(shí),需要根據(jù)硬件平臺(tái)和操作系統(tǒng)的不同采取不同的結(jié)構(gòu),
6、下面介紹幾種常用的應(yīng)用結(jié)構(gòu)。第12頁(yè)/共80頁(yè) 在客戶/服務(wù)器結(jié)構(gòu)中,數(shù)據(jù)庫(kù)服務(wù)器的管理和應(yīng)用分布在兩臺(tái)計(jì)算機(jī)上,客戶機(jī)上安裝應(yīng)用程序和連接工具,通過(guò)Oracle專用的網(wǎng)絡(luò)協(xié)議SQL *Net建立和服務(wù)器的連接,發(fā)出數(shù)據(jù)請(qǐng)求。服務(wù)器上運(yùn)行數(shù)據(jù)庫(kù),通過(guò)網(wǎng)絡(luò)協(xié)議接收連接請(qǐng)求,將執(zhí)行結(jié)果回送客戶機(jī)。第13頁(yè)/共80頁(yè) 分布式結(jié)構(gòu)是客戶機(jī)/服務(wù)器結(jié)構(gòu)的一種特殊類型。在這種結(jié)構(gòu)中,分布式數(shù)據(jù)庫(kù)系統(tǒng)在邏輯上是整體,但在物理上分布在不同的計(jì)算機(jī)網(wǎng)絡(luò)里,通過(guò)連接網(wǎng)絡(luò)連接在一起。網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)可以獨(dú)立處理本地?cái)?shù)據(jù)庫(kù)服務(wù)器中的數(shù)據(jù),執(zhí)行局部應(yīng)用,同是也可存取處理多個(gè)異地?cái)?shù)據(jù)庫(kù)服務(wù)器中的數(shù)據(jù),執(zhí)行全局應(yīng)用。第14
7、頁(yè)/共80頁(yè) 內(nèi)存結(jié)構(gòu): 系統(tǒng)全局區(qū) (SGA):數(shù)據(jù)庫(kù)緩沖區(qū)高速緩存、重做緩沖區(qū)和各種池 程序全局區(qū) (PGA) 進(jìn)程結(jié)構(gòu): 用戶進(jìn)程和服務(wù)器進(jìn)程 后臺(tái)進(jìn)程:SMON、PMON、DBWn、CKPT、LGWR、ARCn 等等 存儲(chǔ)結(jié)構(gòu): 邏輯:數(shù)據(jù)庫(kù)、方案、表空間、段、區(qū)和 Oracle 塊 物理:數(shù)據(jù)、參數(shù)、重做和 OS 塊使用的文件第15頁(yè)/共80頁(yè)Oracle 服務(wù)器: 是一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng),它提供開(kāi)放、全面、集成的方法進(jìn)行信息管理 由 Oracle 實(shí)例和 Oracle 數(shù)據(jù)庫(kù)組成第16頁(yè)/共80頁(yè)數(shù)據(jù)庫(kù)結(jié)構(gòu)數(shù)據(jù)庫(kù)結(jié)構(gòu) - 內(nèi)存內(nèi)存 - 進(jìn)程進(jìn)程 - 存儲(chǔ)存儲(chǔ) 存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)內(nèi)存結(jié)構(gòu)
8、內(nèi)存結(jié)構(gòu)進(jìn)程結(jié)構(gòu)進(jìn)程結(jié)構(gòu)實(shí)例 系統(tǒng)全局區(qū)系統(tǒng)全局區(qū) (SGA)后臺(tái)進(jìn)程后臺(tái)進(jìn)程數(shù)據(jù)庫(kù)文件第17頁(yè)/共80頁(yè)數(shù)據(jù)庫(kù)結(jié)構(gòu)數(shù)據(jù)庫(kù)結(jié)構(gòu) 內(nèi)存內(nèi)存 進(jìn)程進(jìn)程 存儲(chǔ)存儲(chǔ) Java 池?cái)?shù)據(jù)庫(kù)緩沖區(qū)高速緩存重做日志緩沖區(qū)共享池大型池SGAStreams 池服務(wù)器進(jìn)程 1PGA服務(wù)器進(jìn)程 2PGA后臺(tái)進(jìn)程PGA第18頁(yè)/共80頁(yè)數(shù)據(jù)庫(kù)結(jié)構(gòu)數(shù)據(jù)庫(kù)結(jié)構(gòu) 內(nèi)存內(nèi)存 進(jìn)程進(jìn)程 存儲(chǔ)存儲(chǔ) 實(shí)例SGA后臺(tái)進(jìn)程后臺(tái)進(jìn)程服務(wù)器進(jìn)程PGA用戶進(jìn)程用戶進(jìn)程 用戶進(jìn)程:在數(shù)據(jù)庫(kù)用戶請(qǐng)求連接到 Oracle 服務(wù)器時(shí)啟動(dòng) 服務(wù)器進(jìn)程:可以連接到 Oracle 實(shí)例,它在用戶建立會(huì)話時(shí)啟動(dòng) 后臺(tái)進(jìn)程:在啟動(dòng) Oracle 實(shí)例時(shí)啟動(dòng)第1
9、9頁(yè)/共80頁(yè)系統(tǒng)監(jiān)視器 (SMON)數(shù)據(jù)庫(kù)寫(xiě)進(jìn)程 (DBWn)日志寫(xiě)進(jìn)程 (LGWR)進(jìn)程監(jiān)視器 (PMON) 歸檔進(jìn)程 (ARCn)SGAJava 池共享池大型池Streams 池?cái)?shù)據(jù)庫(kù) 緩沖區(qū)高速緩存重做日志緩沖區(qū)檢查點(diǎn) (CKPT)控制文件控制文件數(shù)據(jù)文件數(shù)據(jù)文件重做日志重做日志 文件文件歸檔日志歸檔日志文件文件第20頁(yè)/共80頁(yè)SQL誕生于70年代的IBM某實(shí)驗(yàn)室。 SQL是一種非過(guò)程語(yǔ)言,它描述了如何對(duì)數(shù)據(jù)進(jìn)行檢索、插入、刪除,但它并不說(shuō)明如何進(jìn)行這樣的操作。SQL最新標(biāo)準(zhǔn)為ANSI-92。盡管該標(biāo)準(zhǔn)要求所有的數(shù)據(jù)庫(kù)設(shè)計(jì)者應(yīng)遵守這一標(biāo)準(zhǔn),然而所有的數(shù)據(jù)庫(kù)系統(tǒng)、所用的SQL均與ANS
10、I-92存在一定的差異。本文基于ORACLE數(shù)據(jù)庫(kù)介紹SQL。本文重點(diǎn)介紹數(shù)據(jù)庫(kù)的開(kāi)發(fā)部分而不是管理部分。第21頁(yè)/共80頁(yè)了解數(shù)據(jù)庫(kù)的常用對(duì)象。熟練掌握標(biāo)準(zhǔn)SQL的使用。熟練掌握ORACLE常用標(biāo)量函數(shù)的使用。熟悉SQL的常用優(yōu)化方法。了解ORACLE的存儲(chǔ)過(guò)程及觸發(fā)器的開(kāi)發(fā)。 第22頁(yè)/共80頁(yè)表空間與數(shù)據(jù)文件用戶與權(quán)限表索引、PK、FK視圖序列內(nèi)部函數(shù)自定義函數(shù)存儲(chǔ)過(guò)程觸發(fā)器第23頁(yè)/共80頁(yè)常用數(shù)據(jù)類型表相關(guān)DDLSelectinsertUpdateDelete聚集函數(shù)常用標(biāo)量函數(shù)謂詞第24頁(yè)/共80頁(yè)字符類數(shù)字類日期類二進(jìn)制類第25頁(yè)/共80頁(yè)CREATE TABLECREATE T
11、ABLE table_name(column_name1 data_type,column_name2 data_type,.)DROP TABLE DROP TABLE table_name ALTER TABLEALTER TABLE table_name ADD column_name datatypeALTER TABLE table_name DROP column_name ALTER TABLE table_name MODIFY column_name 第26頁(yè)/共80頁(yè)SELECT DISTINCTselect_list INTO new_table FROM table_s
12、ource WHERE search_condition GROUP BY group_by_expression HAVING search_condition ORDER BY order_expression ASC | DESC 第27頁(yè)/共80頁(yè)INSERT INTO table_nameVALUES (value1, value2,.)INSERT INTO table_name (column1, column2,.)VALUES (value1, value2,.) 第28頁(yè)/共80頁(yè)UPDATE table_name SET column_name = new_value,W
13、HERE column_name = some_value第29頁(yè)/共80頁(yè)DELETE FROM table_name WHERE column_name = some_value 第30頁(yè)/共80頁(yè)INBETWEENLIKEEXISTS第31頁(yè)/共80頁(yè)COUNTSUMMAXMINAVGGROUP BYHAVING第32頁(yè)/共80頁(yè)數(shù)學(xué)函數(shù)字符類函數(shù)SUBSTR、REPLACE、TRIM、LOWER、UPPER日期函數(shù) SYSDATE轉(zhuǎn)換函數(shù)TO_CHAR、TO_DATE、TO_NUMBER其他NVL、DECODE、CASE WHEN第33頁(yè)/共80頁(yè)子查詢表關(guān)聯(lián)外連接第34頁(yè)/共80頁(yè)-
14、訂單明細(xì)create table orderdetail(orderid int not null,productid int not null,quantity int not null);第35頁(yè)/共80頁(yè)-產(chǎn)品數(shù)據(jù)insert into productinfo values(1,ThinkPadR32,IBM,12000);insert into productinfo values(2,ThinkPadR40,IBM,15000);insert into productinfo values(3,Nokia3210,Nokia,1000);insert into productinfo
15、 values(4,Nokia4110,Nokia,2000);-訂單數(shù)據(jù)insert into orderinfo values(1,order1,hoperun,to_date(20070101,yyyymmdd);insert into orderinfo values(2,order2,microsoft,to_date(20060101,yyyymmdd);insert into orderinfo values(3,order3,hoperun,to_date(20070105,yyyymmdd);-訂單明細(xì)數(shù)據(jù)insert into orderdetail values(1,1,
16、10);insert into orderdetail values(1,2,5);insert into orderdetail values(1,3,2);insert into orderdetail values(2,1,30);insert into orderdetail values(2,2,50);insert into orderdetail values(2,3,60);insert into orderdetail values(2,4,100);insert into orderdetail values(3,1,2);insert into orderdetail v
17、alues(3,2,3);第36頁(yè)/共80頁(yè)(1)查詢采購(gòu)ThinkPadR32產(chǎn)品的訂單明細(xì):select * from orderdetail where productid = (select productid from productinfo where productname=ThinkPadR32)第37頁(yè)/共80頁(yè)(2)查詢采購(gòu)IBM公司產(chǎn)品的訂單明細(xì):select * from orderdetail where productid in (select productid from productinfo where companyname=IBM)第38頁(yè)/共80頁(yè)(3)
18、查詢hoperun客戶采購(gòu)的ibm公司產(chǎn)品列表:select * from orderdetail where orderid in(select orderid from orderinfo where customer=hoperun) and productid in (select productid from productinfo where companyname=IBM)order by orderid第39頁(yè)/共80頁(yè)(4)查詢hoperun客戶采購(gòu)的ibm公司價(jià)格在13000以上的所有產(chǎn)品的總件數(shù):select sum(quantity) from orderdetail
19、where orderid in(select orderid from orderinfo where customer=hoperun) and productid in (select productid from productinfo where companyname=IBM and price13000)第40頁(yè)/共80頁(yè)查詢2007年定購(gòu)Nokia產(chǎn)品的客戶:select distinct customer from orderinfo where orderdate=to_date(20070101,yyyymmdd)and orderid in(select orderid
20、 from orderdetail where productid in(select productid from productinfo where companyname=Nokia)第41頁(yè)/共80頁(yè)相關(guān)子查詢和獨(dú)立子查詢的概念。2.3.2(2)中的,查詢采購(gòu)IBM公司產(chǎn)品的訂單明細(xì):select * from orderdetail where productid in (select productid from productinfo where companyname=IBM)用exists相關(guān)子查詢描述為:select * from orderdetail awhere ex
21、ists(select * from productinfo b where ductid=ductid and panyname=IBM)第42頁(yè)/共80頁(yè)2.3.3中的,查詢2007年定購(gòu)Nokia產(chǎn)品的客戶:select distinct customer from orderinfo where orderdate=to_date(20070101,yyyymmdd)and orderid in(select orderid from orderdetail where productid in(select productid from productinfo w
22、here companyname=Nokia)用exists相關(guān)子查詢描述為:select distinct customer from orderinfo awhere a.orderdate=to_date(20070101,yyyymmdd)and exists(select * from orderdetail b where a.orderid=b.orderid and exists(select * from productinfo c where ductid=ductid and panyname=Nokia)第43頁(yè)/共80頁(yè)笛卡爾叉積等值連接不等值連接
23、第44頁(yè)/共80頁(yè)select * from orderinfo,orderdetail第45頁(yè)/共80頁(yè)(1)按照訂單號(hào)、采購(gòu)產(chǎn)品名稱、數(shù)量顯示訂單明細(xì)信息:select a.orderid,ductname,a.quantity from orderdetail a,productinfo bwhere ductid=ductid第46頁(yè)/共80頁(yè)(2)按照客戶名稱、訂單名稱、采購(gòu)產(chǎn)品名稱、數(shù)量顯示訂單明細(xì)信息:select c.customer,c.ordername,ductname,a.quantity from orderdetail a,p
24、roductinfo b,orderinfo cwhere ductid=ductid and a.orderid=c.orderid第47頁(yè)/共80頁(yè)極少使用,不作介紹。第48頁(yè)/共80頁(yè)插入一條新產(chǎn)品數(shù)據(jù):insert into productinfo values(5,ThinkPadT41,IBM,20000);查詢已訂貨產(chǎn)品的訂貨情況select ductname,b.orderid,b.quantityfrom productinfo a,orderdetail bwhere ductid=ductidorder by d
25、uctname,b.orderid查詢所有產(chǎn)品的訂貨情況select ductname,b.orderid,b.quantityfrom productinfo a left join orderdetail bon ductid=ductidorder by ductname,b.orderid第49頁(yè)/共80頁(yè)左連接select ductname,b.orderid,b.quantityfrom productinfo a left join orderdetail bon ductid=ductidorder by a
26、.productname,b.orderid右連接select ductname,b.orderid,b.quantityfrom orderdetail b right join productinfo aon ductid=ductidorder by ductname,b.orderid第50頁(yè)/共80頁(yè)統(tǒng)計(jì)所有產(chǎn)品的訂貨數(shù)量:select ductname,nvl(sum(b.quantity),0)from productinfo a left join orderdetail bon ductid=ductidg
27、roup by ductnameorder by ductname第51頁(yè)/共80頁(yè)基于數(shù)據(jù)庫(kù)的應(yīng)用系統(tǒng)性能的優(yōu)化主要從兩個(gè)方面來(lái)考慮,即DBA級(jí)和SQL級(jí)。DBA級(jí)的優(yōu)化主要包括:數(shù)據(jù)庫(kù)內(nèi)存及緩沖池的合理配置、數(shù)據(jù)表空間(數(shù)據(jù)段)和索引表空間(數(shù)據(jù)段)的分離、裸設(shè)備/文件系統(tǒng)的合理使用以及巨型表的分區(qū)等等。本文主要介紹較常用的、可操作性較強(qiáng)的SQL級(jí)的優(yōu)化方法。第52頁(yè)/共80頁(yè)全表掃描:當(dāng)數(shù)據(jù)庫(kù)服務(wù)為執(zhí)行某一個(gè)SQL語(yǔ)句需要對(duì)表中的每一個(gè)記錄進(jìn)行檢查時(shí)就會(huì)發(fā)生全表掃描。它通常在執(zhí)行SELECT語(yǔ)句時(shí)發(fā)生,但有時(shí)也會(huì)在更新和刪除記錄時(shí)發(fā)生。全表掃描通常是因?yàn)樵赪HERE子
28、句中使用了索引中沒(méi)有的字段。一般情況下,應(yīng)避免全表掃描。第53頁(yè)/共80頁(yè)全表掃描:當(dāng)數(shù)據(jù)庫(kù)服務(wù)為執(zhí)行某一個(gè)SQL語(yǔ)句需要對(duì)表中的每一個(gè)記錄進(jìn)行檢查時(shí)就會(huì)發(fā)生全表掃描。它通常在執(zhí)行SELECT語(yǔ)句時(shí)發(fā)生,但有時(shí)也會(huì)在更新和刪除記錄時(shí)發(fā)生。全表掃描通常是因?yàn)樵赪HERE子句中使用了索引中沒(méi)有的字段。一般情況下,應(yīng)避免全表掃描。第54頁(yè)/共80頁(yè)創(chuàng)建索引:避免全表掃描的首要手段就是創(chuàng)建索引。在下列情況下,需要建立索引:最大的限制條件返回表的數(shù)據(jù)庫(kù)小于表總數(shù)據(jù)量的10%。最大的限制條件在SQL語(yǔ)句中是經(jīng)常使用的。列經(jīng)常被ORDER BY或GROUP BY子句所引用。在SQL中應(yīng)盡量避免在索引列上使用
29、函數(shù)。如ORDER BY TO_NUMBER(USERID)第55頁(yè)/共80頁(yè)版本較老得ORACLE數(shù)據(jù)庫(kù)中WHERE子句的布局: 查詢優(yōu)化器對(duì)WHERE子句中的條件是從后向前讀。 盡量把最大條件的限制條件語(yǔ)句放在最后。第56頁(yè)/共80頁(yè)OR、IN、EXISTS:盡量少用OR,而用IN。盡量用EXISTS代替IN,因?yàn)镮N不使用索引,而EXISTS使用索引進(jìn)行優(yōu)化。第57頁(yè)/共80頁(yè)存儲(chǔ)過(guò)程可簡(jiǎn)單地理解為一個(gè)處理復(fù)雜業(yè)務(wù)邏輯的一組SQL代碼塊。存儲(chǔ)過(guò)程的優(yōu)勢(shì)主要有:存儲(chǔ)過(guò)程業(yè)務(wù)邏輯集中,方便維護(hù)。存儲(chǔ)過(guò)程是預(yù)編譯的,可提高性能。存儲(chǔ)過(guò)程可大量減少應(yīng)用程序與數(shù)據(jù)庫(kù)服務(wù)器的通信,減少網(wǎng)絡(luò)負(fù)荷。在多
30、層架構(gòu)體系出現(xiàn)之前,很多應(yīng)用系統(tǒng)采用存儲(chǔ)過(guò)程來(lái)封裝業(yè)務(wù)邏輯。第58頁(yè)/共80頁(yè)根據(jù)訂單號(hào)刪除訂單及其明細(xì)信息。CREATE OR REPLACE PROCEDURE del_order(v_order_id in varchar2)asbegin -刪除子表 delete from orderdetail where orderid=v_order_id; -刪除主表 delete from orderinfo where orderid=v_order_id; commit;end;/執(zhí)行該存儲(chǔ)過(guò)程:execute del_order(1);第59頁(yè)/共80頁(yè)觸發(fā)器機(jī)制從本質(zhì)上來(lái)說(shuō)是一種特殊
31、類型的存貯過(guò)程,它可以在下列的三種情況之一發(fā)生時(shí)自動(dòng)運(yùn)行。更新插入刪除。觸發(fā)器機(jī)制所進(jìn)行的活動(dòng)是被默認(rèn)為事務(wù)處理的一部分進(jìn)行。第60頁(yè)/共80頁(yè)對(duì)插入或修改userinfo.useraddr字段的null值自動(dòng)轉(zhuǎn)換成空字符串。CREATE OR REPLACE TRIGGER trg_userinfo BEFORE INSERT OR UPDATE ON userinfo FOR EACH ROWBEGIN IF (:new.useraddr IS NULL) THEN :new.useraddr:=; END IF;END;第61頁(yè)/共80頁(yè)本部分內(nèi)容前提要求熟練掌握了基本的SQL語(yǔ)句。本部
32、分將涉及到PL/SQL語(yǔ)句塊結(jié)構(gòu)、變量和類型、錯(cuò)誤處理、控制結(jié)構(gòu)、游標(biāo)等內(nèi)容。 第62頁(yè)/共80頁(yè)為什么使用PL/SQL 一)PL/SQL是用于從各種環(huán)境中訪問(wèn)Oracle數(shù)據(jù)庫(kù)的一 種編程語(yǔ)言。它與數(shù)據(jù)庫(kù)服務(wù)器集成在一起,因此,PL/SQL代碼可以得到快速有效的處理。二)PL/SQL將SQL語(yǔ)言(4GL)強(qiáng)大性和靈活性與3GL的過(guò)程化結(jié)構(gòu)融為一體。三)網(wǎng)絡(luò)流量減少,應(yīng)用程序執(zhí)行得更快。第63頁(yè)/共80頁(yè)P(yáng)L/SQL語(yǔ)句塊 PL/SQL程序的基本單元是語(yǔ)句塊,所有的語(yǔ)句塊包含三個(gè)基本的部分:聲明部分、執(zhí)行部分和異常處理部分。只有執(zhí)行部分是必須的,其他二個(gè)部分都是可選的。有二種類型的語(yǔ)句塊:匿名
33、的和命名的。 DECLAREBEGINEXCEPTIONEND;第64頁(yè)/共80頁(yè)變量和類型在PL/SQL和數(shù)據(jù)庫(kù)之間是通過(guò)變量傳送消息的。變量在語(yǔ)句塊的聲明部分聲明的。變量聲明我們通過(guò)PL/SQL語(yǔ)句塊中的變量與數(shù)據(jù)庫(kù)進(jìn)行通信,來(lái)自數(shù)據(jù)庫(kù)的信息可以被賦值給變量,而變量中的內(nèi)容也可以被插入到數(shù)據(jù)庫(kù)中。變量在語(yǔ)句塊的聲明部分被聲明。聲明變量如果一個(gè)變量沒(méi)有初始化,它會(huì)被缺省地被賦值為Null,如果指明是Not Null,那么該變量就必須初始化。如果在變量聲明中使用了CONSTANT,那么該變量必須要初始化,在聲明過(guò)程中也可以用關(guān)鍵字DEFAULT替換 :=在聲明部分,每一行只能聲明一個(gè)變量。下面
34、的聲明是錯(cuò)誤的DECLARE v_Firstname ,v_Lastname VARCHAR2(20);第65頁(yè)/共80頁(yè)P(yáng)L/SQL類型PL/SQL類型有:標(biāo)量類型、復(fù)合類型、LOB類型、引用類型、對(duì)象類型使用%TYPE在許多情況下,PL/SQL變量用來(lái)處理存儲(chǔ)在數(shù)據(jù)庫(kù)表中的數(shù)據(jù)。在這種情況下,變量應(yīng)該擁有與表列相同的類型。DECLAREv_Firstname students.first_name%TYPE;用戶定義子類型子類型是基于現(xiàn)有類型的PL/SQL類型。語(yǔ)法:SUBTYPE new_type IS original_type;如:DECLARE SUBTYPE t_loop IS
35、NUMBER(5); v_Count t_loop; 第66頁(yè)/共80頁(yè)什么是異常聲明異常 預(yù)定義異常 用戶自定義異常拋出異常處理異常創(chuàng)建錯(cuò)誤消息RAISE_APPLICATION_ERROR(error_number,error_messages,keep_errors)第67頁(yè)/共80頁(yè)異常傳播 可執(zhí)行部分產(chǎn)生的異常 聲明部分出現(xiàn)的異常 異常部分產(chǎn)生的異常第68頁(yè)/共80頁(yè)P(yáng)L/SQL控制結(jié)構(gòu) IF-THEN-ELSE CASE 帶標(biāo)號(hào)的CASE語(yǔ)句 循環(huán)語(yǔ)句a)簡(jiǎn)單循環(huán) LOOPEND LOOPb)WHILE循環(huán) WHILELOOPEND LOOPc)數(shù)字式FOR循環(huán) FORLOOPEND LOOP第69頁(yè)/共80頁(yè)什么是游標(biāo)? 游標(biāo)用來(lái)處理從數(shù)據(jù)庫(kù)中檢索的多行記錄(使用SELECT語(yǔ)句)。利用游標(biāo),程序可以
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新能源汽車充電樁安裝與維護(hù)個(gè)人聘用合同4篇
- 2025年食堂外包項(xiàng)目績(jī)效考核與評(píng)估合同3篇
- 2025年度個(gè)人消費(fèi)分期貸款合同模板(2025版)4篇
- 2025年度個(gè)人工廠品牌形象及營(yíng)銷權(quán)轉(zhuǎn)讓合同2篇
- 2025年全球及中國(guó)三環(huán)癸烷二甲醇二甲基丙烯酸酯行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)全自動(dòng)線材前處理機(jī)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球調(diào)濕蒸紗機(jī)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年度個(gè)人借款延期還款及擔(dān)保人責(zé)任合同2篇
- 2025年度個(gè)人房產(chǎn)交易定金擔(dān)保合同范本2篇
- 2025年度企業(yè)間技術(shù)秘密保密及合作開(kāi)發(fā)合同4篇
- 勵(lì)志課件-如何做好本職工作
- 2024年山東省濟(jì)南市中考英語(yǔ)試題卷(含答案解析)
- 2024年社區(qū)警務(wù)規(guī)范考試題庫(kù)
- 2024年食用牛脂項(xiàng)目可行性研究報(bào)告
- 靜脈治療護(hù)理技術(shù)操作標(biāo)準(zhǔn)(2023版)解讀 2
- 2024年全國(guó)各地中考試題分類匯編(一):現(xiàn)代文閱讀含答案
- 2024-2030年中國(guó)戶外音箱行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- GB/T 30306-2024家用和類似用途飲用水處理濾芯
- 家務(wù)分工與責(zé)任保證書(shū)
- 消防安全隱患等級(jí)
- 溫室氣體(二氧化碳和甲烷)走航監(jiān)測(cè)技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論