Oracle數(shù)據(jù)庫(kù)第講四_第1頁(yè)
Oracle數(shù)據(jù)庫(kù)第講四_第2頁(yè)
Oracle數(shù)據(jù)庫(kù)第講四_第3頁(yè)
Oracle數(shù)據(jù)庫(kù)第講四_第4頁(yè)
Oracle數(shù)據(jù)庫(kù)第講四_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

oracle第5講1.pl/sql的介紹2.pl/sql的基礎(chǔ)主講李珩oracle數(shù)據(jù)庫(kù)pl/sql的介紹■pl/sql是什么pl/sql(procedurallanguage/sql)是oracle在標(biāo)準(zhǔn)的sql語(yǔ)言上的擴(kuò)展.pl/sql不僅允許嵌入sql語(yǔ)言,還可以定義變量和常量,允許使用條件語(yǔ)句和循環(huán)語(yǔ)句,允許使用例外處理各種錯(cuò)誤,這樣使得它的功能變得更加強(qiáng)大。■學(xué)習(xí)必要性[圖]①提高應(yīng)用程序的運(yùn)行性能②模塊化的設(shè)計(jì)思想[分頁(yè)的過(guò)程,訂單的過(guò)程,轉(zhuǎn)賬的過(guò)程..]③減少網(wǎng)絡(luò)傳輸量④提高安全性■缺點(diǎn)移植性不好.

主講李珩oracle數(shù)據(jù)庫(kù)pl/sql的介紹—用什么開(kāi)發(fā)pl/sql■

sqlplus開(kāi)發(fā)工具sqlplus是oracle公司提供的一個(gè)工具,這個(gè)因?yàn)槲覀冊(cè)谝郧敖榻B過(guò)的:舉一個(gè)簡(jiǎn)單案例:編寫(xiě)一個(gè)存儲(chǔ)過(guò)程,該過(guò)程可以向某表中添加記錄.■

pl/sqldeveloper開(kāi)發(fā)工具pl/sqldeveloper是用于開(kāi)發(fā)pl/sql塊的集成開(kāi)發(fā)環(huán)境(ide),他是一個(gè)獨(dú)立的產(chǎn)品,而不是oracle的一個(gè)附帶品。舉一個(gè)簡(jiǎn)單案例:編寫(xiě)一個(gè)存儲(chǔ)過(guò)程,該過(guò)程可以刪除某表記錄.主講李珩oracle數(shù)據(jù)庫(kù)創(chuàng)建過(guò)程基本語(yǔ)法:createprocedure過(guò)程名(參數(shù)1…)isbegin執(zhí)行語(yǔ)句;end;/執(zhí)行過(guò)程語(yǔ)法:exec

過(guò)程名(傳入?yún)?shù)…)pl/sql基礎(chǔ)知識(shí)—介紹■

介紹開(kāi)發(fā)人員使用pl/sql編寫(xiě)應(yīng)用模塊時(shí),不僅需要掌握sql語(yǔ)句的編寫(xiě)方法,還要掌握pl/sql語(yǔ)句及語(yǔ)法規(guī)則。pl/sql編程可以使用變量和邏輯控制語(yǔ)句,從而可以編寫(xiě)非常有用的功能模塊。比如:分頁(yè)存儲(chǔ)過(guò)程模塊、訂單處理存儲(chǔ)過(guò)程模塊、轉(zhuǎn)賬存儲(chǔ)過(guò)程模塊..而且如果使用pl/sql編程,我們可以輕松的完成非常復(fù)雜的查詢(xún)要求.等學(xué)習(xí)了pl/sql編程基礎(chǔ)再講吧主講李珩oracle數(shù)據(jù)庫(kù)pl/sql基礎(chǔ)知識(shí)—pl/sql可以做什么■

簡(jiǎn)單分類(lèi)

|-----過(guò)程(存儲(chǔ)過(guò)程) | |-----函數(shù) 塊(編程)-------| |-----觸發(fā)器

| |-----包分分類(lèi)吧主講李珩oracle數(shù)據(jù)庫(kù)pl/sql基礎(chǔ)知識(shí)—編寫(xiě)規(guī)范■

編寫(xiě)規(guī)范①注釋單行注釋--多行注釋/*....*/來(lái)劃分②標(biāo)識(shí)符號(hào)的命名規(guī)范1)當(dāng)定義變量時(shí),建議用v_作為前綴v_sal2)當(dāng)定義常量時(shí),建議用c_作為前綴c_rate3)當(dāng)定義游標(biāo)時(shí),建議用_cursor作為后綴emp_cursor;4)當(dāng)定義例外時(shí),建議用e_作為前綴e_error

主講李珩oracle數(shù)據(jù)庫(kù)pl/sql基礎(chǔ)知識(shí)—pl/sql塊介紹■

介紹塊(block)是pl/sql的基本程序單元,編寫(xiě)pl/sql程序?qū)嶋H上就是編寫(xiě)pl/sql塊。要完成相對(duì)簡(jiǎn)單的應(yīng)用功能,可能只需要編寫(xiě)一個(gè)pl/sql塊;但是如果要想實(shí)現(xiàn)復(fù)雜的功能,可能需要在一個(gè)pl/sql塊中嵌套其它的pl/sql塊.

主講李珩oracle數(shù)據(jù)庫(kù)pl/sql基礎(chǔ)知識(shí)—pl/sql塊結(jié)構(gòu)■

塊結(jié)構(gòu)示意圖pl/sql塊由三個(gè)部分構(gòu)成:定義部分、執(zhí)行部分、例外處理部分.如下所示:declare/*定義部分-----定義常量、變量、游標(biāo)、例外、復(fù)雜數(shù)據(jù)類(lèi)型*/begin/*執(zhí)行部分-----要執(zhí)行的pl/sql語(yǔ)句和sql語(yǔ)句*/exception/*例外處理部分----處理運(yùn)行的各種錯(cuò)誤*/end;★可以和java編程結(jié)構(gòu)做一個(gè)簡(jiǎn)單的比較 定義部分是從declare開(kāi)始的,該部分是可選的。執(zhí)行部分是從begin開(kāi)始的,該部分是必須的。例外處理部分是從exception開(kāi)始的,該部分是可選的主講李珩oracle數(shù)據(jù)庫(kù)pl/sql基礎(chǔ)知識(shí)—pl/sql實(shí)例■

實(shí)例1-只包括執(zhí)行部分的pl/sql塊?相關(guān)說(shuō)明:dbms_output是oracle所提供的包(類(lèi)似java的開(kāi)發(fā)包),該包包含一些過(guò)程,put_line就是dbms_output包的一個(gè)過(guò)程。

案例:輸出hello,world主講李珩oracle數(shù)據(jù)庫(kù)pl/sql基礎(chǔ)知識(shí)—pl/sql實(shí)例■

實(shí)例2-包含定義部分和執(zhí)行部分的pl/sql塊?相關(guān)說(shuō)明:&表示要接收從控制臺(tái)輸入的變量||表示把兩個(gè)串拼接案例:根據(jù)用戶(hù)輸入的雇員編號(hào),顯示該雇員的名字主講李珩oracle數(shù)據(jù)庫(kù)pl/sql基礎(chǔ)知知識(shí)—pl/sql實(shí)例■實(shí)例3-包含定義部部分、執(zhí)行行部分和例例外處理部部分為了避免pl/sql程序的運(yùn)行行錯(cuò)誤,提提高pl/sql的健壯性,,應(yīng)該對(duì)可可能的錯(cuò)誤進(jìn)行行處理,這個(gè)很有必必要:①比如在實(shí)實(shí)例2中,如果輸輸入了不存存在的雇員員號(hào),應(yīng)當(dāng)當(dāng)做例外處處理.②有時(shí)出現(xiàn)異異常,希望望用另外的的邏輯處理理,[網(wǎng)示]比如,如果果不存在就就加入編號(hào)號(hào)為1,名字為’馬大哈’這么一個(gè)人人.我們看看如如何完成①①的要求相關(guān)說(shuō)明:oracle事先預(yù)定義義了一些例例外,no_data_found就是找不到到數(shù)據(jù)的例例外.主講李珩珩oracle數(shù)據(jù)庫(kù)pl/sql基礎(chǔ)知知識(shí)—過(guò)程程快速入門(mén)■過(guò)程過(guò)程用于執(zhí)執(zhí)行特定的的操作.當(dāng)建立過(guò)程程時(shí),既可可以指定輸輸入?yún)?shù)(in),也可以指定定輸出參數(shù)數(shù)(out).通過(guò)在過(guò)程程中使用輸輸入?yún)?shù),,可以將數(shù)數(shù)據(jù)傳遞到到執(zhí)行部分分;通過(guò)使使用輸出參參數(shù),可以以將執(zhí)行部部分的數(shù)據(jù)據(jù)傳遞到應(yīng)應(yīng)用環(huán)境.在sqlplus中可以使用用createprocedure命令來(lái)建立立過(guò)程。實(shí)例如下:①請(qǐng)考慮編寫(xiě)寫(xiě)一個(gè)過(guò)程程,可以輸輸入雇員名名,新工資可可修改雇員員的工資②如何調(diào)用用過(guò)程有兩兩種方法:exec過(guò)程名(參數(shù)值..)call過(guò)程名(參數(shù)值..)createprocedure過(guò)程名(變量in變量類(lèi)型…,變量out變量類(lèi)型…)is定義變量begin執(zhí)行語(yǔ)句;end;主講李珩珩oracle數(shù)據(jù)庫(kù)pl/sql基礎(chǔ)知識(shí)——過(guò)程快速入門(mén)■java中調(diào)用過(guò)程③如何在java程序中調(diào)用一一個(gè)存儲(chǔ)過(guò)程程課堂小練習(xí)::編寫(xiě)一個(gè)過(guò)過(guò)程,可以接接受id和薪水,更新新薪水,如果果id不存在,需要要在exception中捕獲,并給給出提示!需要在控制臺(tái)臺(tái),和java程序中都調(diào)用用?如何使用過(guò)程程返回值。特別說(shuō)明:對(duì)于過(guò)程我們們會(huì)在以后給給大家詳細(xì)具具體的介紹,,現(xiàn)在請(qǐng)大家家先有一個(gè)概概念.主講李珩珩oracle數(shù)據(jù)庫(kù)動(dòng)手體驗(yàn):我我們寫(xiě)一個(gè)java程序來(lái)調(diào)用前前面的存儲(chǔ)過(guò)過(guò)程pl/sql基礎(chǔ)知識(shí)——函數(shù)快速入門(mén)■函數(shù)函數(shù)用于返回回特定的數(shù)據(jù)據(jù),當(dāng)建立函數(shù)時(shí)時(shí),在函數(shù)頭頭部必須包含含return子句,而在函函數(shù)體內(nèi)必須須包含return語(yǔ)句返回的數(shù)數(shù)據(jù)。我們可可以使用createfunction來(lái)建立函數(shù),實(shí)際案例:在sqlplus中調(diào)用函數(shù)同樣我們可以以在java程序中調(diào)用該該函數(shù)selectannual_income('SCOTT')fromdual;//這樣可以通過(guò)rs.getInt(1)得到返回的結(jié)結(jié)果主講李珩珩oracle數(shù)據(jù)庫(kù)案例:請(qǐng)編寫(xiě)寫(xiě)一個(gè)函數(shù),,可以接收用用戶(hù)名并返回回該用戶(hù)的年年薪.createfunction函數(shù)名(參數(shù)1…)return數(shù)據(jù)類(lèi)型is定義變量;begin執(zhí)行語(yǔ)句;end;var變量名變量量類(lèi)型call函數(shù)名(參數(shù)值…)into:變量名;print變量名pl/sql基礎(chǔ)知識(shí)——包■包包用于在邏輯輯上組合過(guò)程程和函數(shù),它由包規(guī)范和和包體兩部分分組成。①我們可以使使用createpackage命令來(lái)創(chuàng)建包包:實(shí)例:create[orreplace]package包名isprocedure過(guò)程名(變量名變量量類(lèi)型…);function函數(shù)名(變量名變量量類(lèi)型…)return數(shù)據(jù)類(lèi)型;end;包的規(guī)范只包包含了過(guò)程和和函數(shù)的說(shuō)明明,但是沒(méi)有有過(guò)程和函數(shù)數(shù)的實(shí)現(xiàn)代碼。包體用于于實(shí)現(xiàn)包規(guī)范范中的過(guò)程和和函數(shù),主講李珩珩oracle數(shù)據(jù)庫(kù)請(qǐng)編寫(xiě)一個(gè)包包,該包有一一個(gè)過(guò)程,該該過(guò)程可以接接收用戶(hù)名和和新的薪水,,(將來(lái)用于通通過(guò)用戶(hù)名去去更新薪水))還有一個(gè)函函數(shù),該函數(shù)數(shù)可以接收一一個(gè)用戶(hù)名((將來(lái)要實(shí)現(xiàn)現(xiàn)得到該用戶(hù)戶(hù)的年薪是多多少)pl/sql基礎(chǔ)知識(shí)——包②建立包體可以以使用createpackagebody命令createorreplacepackagebody包名isprocedure過(guò)程名(變量名變量量類(lèi)型…)isbegin執(zhí)行語(yǔ)句;end;function函數(shù)名(變量名變量量類(lèi)型…)return數(shù)據(jù)類(lèi)型is定義變量;begin執(zhí)行語(yǔ)句;end;end;主講李珩珩oracle數(shù)據(jù)庫(kù)案例:請(qǐng)實(shí)現(xiàn)現(xiàn)前面定義的的包中的過(guò)程程和函數(shù)pl/sql基礎(chǔ)知識(shí)——包③如何調(diào)用包的的過(guò)程或是函函數(shù)當(dāng)調(diào)用包的過(guò)過(guò)程或是函數(shù)數(shù)時(shí),在過(guò)程程和函數(shù)前需需要帶有包名名,如果要訪問(wèn)其它方案案的包,還需需要在包名前前加方案名.如:特別說(shuō)明:包是pl/sql中非常重要的的部分,我們們?cè)谑褂眠^(guò)程程分頁(yè)時(shí),將將會(huì)再次體驗(yàn)驗(yàn)它的威力。主講李珩珩oracle數(shù)據(jù)庫(kù)exec方案名.包名.過(guò)程名(參數(shù)值..);call方案名.包名.過(guò)程名(參數(shù)值…);測(cè)試前面包中中的函數(shù)和過(guò)過(guò)程名是否正正確調(diào)用!pl/sql基礎(chǔ)知識(shí)——觸發(fā)器■觸發(fā)器簡(jiǎn)單介介紹觸發(fā)器是指隱隱含的執(zhí)行的的存儲(chǔ)過(guò)程。當(dāng)定義觸發(fā)發(fā)器時(shí),必須須要指定觸發(fā)發(fā)的事件和觸觸發(fā)的操作,,常用的觸發(fā)發(fā)事件包括insert,update,delete語(yǔ)句,,而觸觸發(fā)操操作實(shí)實(shí)際就就是一一個(gè)pl/sql塊??煽梢允故褂胏reatetrigger來(lái)建立立觸發(fā)發(fā)器。。特別說(shuō)說(shuō)明:我們會(huì)會(huì)在后面詳詳細(xì)為大家家介紹紹觸發(fā)發(fā)器的的使用用,因因?yàn)橛|觸發(fā)器器是非非常有有用的的,可維護(hù)護(hù)數(shù)據(jù)據(jù)庫(kù)的的安全全和一一致性性。主講李李珩珩oracle數(shù)據(jù)庫(kù)庫(kù)pl/sql基基礎(chǔ)知知識(shí)——定義義并使使用變變量■介紹在編寫(xiě)寫(xiě)pl/sql程序時(shí)時(shí),可可以定定義變變量和和常量量;在在pl/sql程序中中包括有有:①標(biāo)量類(lèi)類(lèi)型(scalar)②復(fù)合類(lèi)類(lèi)型(composite)③參照類(lèi)類(lèi)型(reference)④lob(largeobject)主講李李珩珩oracle數(shù)據(jù)庫(kù)庫(kù)pl/sql基基礎(chǔ)知知識(shí)——定義義并使使用變變量■標(biāo)量(scalar)-常用類(lèi)類(lèi)型在編編寫(xiě)寫(xiě)pl/sql塊時(shí)時(shí),如果果要要使使用用變變量量,需在在定定義義部部分分定定義義變變量量。。pl/sql中定定義義變變量量和和常常量量的的語(yǔ)語(yǔ)法法如如下下:identifier[constant]datatype[notnull][:=|defaultexpr]identifier:名稱(chēng)稱(chēng)constant:指定定常常量量.需要要指指定定它它的的初初始始植植,且其其值值是是不不能能改改變變的的datatype:數(shù)據(jù)據(jù)類(lèi)類(lèi)型型notnull:指定定變變量量值值不不能能為為null:=給變變量量或或是是常常量量指指定定初初始始植植default用于于指指定定初初始始植植expr:指定定初初始始植植的的pl/sql表達(dá)達(dá)式式,可是是文文本本值值、、其其它它變變量量、、函函數(shù)數(shù)等等舉例例說(shuō)說(shuō)明明吧吧主講講李李珩珩oracle數(shù)據(jù)據(jù)庫(kù)庫(kù)pl/sql基基礎(chǔ)礎(chǔ)知知識(shí)識(shí)——定定義義并并使使用用變變量量■標(biāo)量量定定義義的的案案例例①定義一個(gè)個(gè)變長(zhǎng)字符符串v_enamevarchar2(10);②定義一個(gè)小小數(shù)范圍圍-9999.99~9999.99v_sal number(6,2);③定義一個(gè)小小數(shù)并給一一個(gè)初始植植為5.4:=是pl/sql的賦值號(hào)v_sal2 number(6,2):=5.4④定義一個(gè)日日期類(lèi)型的的數(shù)據(jù)v_hiredate date;⑥定義一個(gè)布布爾變量,,不能為空空,初始植植為falsev_validbooleannotnulldefaultfalse;主講李珩珩oracle數(shù)據(jù)庫(kù)pl/sql基礎(chǔ)知知識(shí)—定義義并使用變變量■標(biāo)量(scalar)-使用標(biāo)量在定義好變變量后,就就可以使用用這些變量量。這里需需要說(shuō)明的的是pl/sql塊為變量賦賦值不同于于其它的編編程語(yǔ)言,,需要在等等號(hào)前加冒冒號(hào)(:=)案例:以輸輸入員工號(hào)號(hào),顯示雇雇員姓名、、工資、個(gè)人所得稅稅(稅率為0.03)為例。說(shuō)明明變量的使使用,看看如何編編寫(xiě).主講李珩珩oracle數(shù)據(jù)庫(kù)pl/sql基礎(chǔ)知知識(shí)—定義義并使用變變量■標(biāo)量(scalar)-使用%type類(lèi)型對(duì)于上面的的pl/sql塊有一個(gè)問(wèn)問(wèn)題:就是如果員員工的姓名名超過(guò)了5字符的話,,就會(huì)有錯(cuò)錯(cuò)誤,為了了降低pl/sql程序的維護(hù)護(hù)工作量,,可以使用%type屬性定義變變量,這樣樣它會(huì)按照照數(shù)據(jù)庫(kù)列列來(lái)確定你你定義的變變量的類(lèi)型型和長(zhǎng)度,我們看看這這個(gè)怎么使使用:標(biāo)識(shí)符名表表名.列名%type;主講李珩珩oracle數(shù)據(jù)庫(kù)pl/sql基礎(chǔ)知知識(shí)—定義義并使用變變量■復(fù)合變量(composite)-介紹用于存放多多個(gè)值的變變量。常用用的包括這這:①pl/sql記錄②pl/sql表主講李珩珩oracle數(shù)據(jù)庫(kù)pl/sql基礎(chǔ)知識(shí)——定義并使用用變量■復(fù)合類(lèi)型-pl/sql記錄類(lèi)似與高級(jí)語(yǔ)語(yǔ)言中的結(jié)構(gòu)構(gòu)體,需要注意的的是,當(dāng)引用用pl/sql記錄成員員時(shí),必須要要加記錄變量量作為前綴(記錄變量.記錄成員)如下:主講李珩珩oracle數(shù)據(jù)庫(kù)請(qǐng)編寫(xiě)一個(gè)過(guò)過(guò)程,該過(guò)程程可以接收一一個(gè)用戶(hù)編號(hào)號(hào),并顯示該該用戶(hù)的名字字,薪水,工工作崗位(注意:要求求用pl/sql記錄實(shí)現(xiàn))type自定義的pl/sql記錄名isrecord(變量名變量量類(lèi)型,變量名變量量類(lèi)型,);//使用自定義的的pl/sql記錄變量名自定定義的pl/sql記錄名;pl/sql基礎(chǔ)知識(shí)——定義并使用用變量■復(fù)合類(lèi)型-pl/sql表(了解即可)相當(dāng)于高級(jí)語(yǔ)語(yǔ)言中的數(shù)組組.但是是需要要注意意的是是在高高級(jí)語(yǔ)語(yǔ)言中中數(shù)組組的下下標(biāo)不不能為為負(fù)數(shù)數(shù),而而pl/sql是可可以為為負(fù)數(shù)數(shù)的,并且且表元元素的的下標(biāo)標(biāo)沒(méi)有有限制制.實(shí)實(shí)例如如下declaretypeaa_table_typeistableofemp.ename%typeindexbybinary_integer;aa_tableaa_table_type;--定義一一個(gè)變變量:aa_table:類(lèi)型beginselectenameintoaa_table(-1)fromempwhereempno=7788;dbms_output.put_line('員員工名名:'||aa_table(-1));end;說(shuō)明::aa_table_type是是pl/sql表類(lèi)類(lèi)型emp.ename%type指指定了了表的的元素素的類(lèi)類(lèi)型和和長(zhǎng)度度aa_table為為pl/sql表表變量量aa_table(0)則表表示下下標(biāo)為為0的的元素素主講李李珩珩oracle數(shù)據(jù)庫(kù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論