




已閱讀5頁(yè),還剩34頁(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)介
第7章PL SQL編程基礎(chǔ) 前面所學(xué)習(xí)的SQL是操作關(guān)系性數(shù)據(jù)庫(kù)的一種通用語(yǔ)言 但是SQL本身是一種非過(guò)程化的語(yǔ)言 即不用指明執(zhí)行的具體方法和途徑 而是簡(jiǎn)單地調(diào)用相應(yīng)語(yǔ)句直接取得結(jié)果即可 所以SQL本身并不適合在復(fù)雜的業(yè)務(wù)流程下使用 為了解決這一問(wèn)題 Oracle提供了PL SQL編程 這是一種過(guò)程化編程語(yǔ)言 與JAVA語(yǔ)言一樣關(guān)注于處理細(xì)節(jié) 可以實(shí)現(xiàn)較為復(fù)雜的業(yè)務(wù)邏輯 1 7 1PL SQL簡(jiǎn)介 PL SQL語(yǔ)法結(jié)構(gòu) DECLARE 聲明部分 例如 定義變量 常量 游標(biāo)BEGIN 程序編寫 SQL語(yǔ)句EXECEPTION 處理異常END 聲明部分 DECLARE 包含變量定義 用戶定義的PL SQL類型 游標(biāo) 引用的函數(shù)或過(guò)程 執(zhí)行部分 BEGIN 包含變量賦值 對(duì)象初始化 條件結(jié)構(gòu) 迭代結(jié)構(gòu) 嵌套的PL SQL塊 或是對(duì)局部或者存儲(chǔ)PL SQL命名塊的調(diào)用 異常部分 exception 包含錯(cuò)誤處理語(yǔ)句 該語(yǔ)句可以像執(zhí)行部分一樣使用所有項(xiàng) 結(jié)束部分 END 程序執(zhí)行到END表示結(jié)束 分號(hào)用戶結(jié)束塊 正斜杠 執(zhí)行塊程序 2 既沒(méi)有變量 也沒(méi)有流程控制 分支 循環(huán) PL SQL與SQL區(qū)別 SQL PL SQL PL SQL是結(jié)構(gòu)化和過(guò)程化的結(jié)合體 每條SQL語(yǔ)句逐一發(fā)送給數(shù)據(jù)庫(kù) 一次性將多條SQL語(yǔ)言一起發(fā)送給數(shù)據(jù)庫(kù) 7 1PL SQL簡(jiǎn)介 3 最簡(jiǎn)單的PL SQL塊可以不做任何事情 但是在PL SQL編程過(guò)程中要求 執(zhí)行塊至少要有一條語(yǔ)句 即使這條語(yǔ)句只是編寫一個(gè)NULL也行 范例 編寫不做任何工作的PL SQL塊 BEGINNULL END 范例 編寫一個(gè)簡(jiǎn)單的PL SQL程序 DECLAREv numnumber BEGINv num 30 DBMS output put line v num變量的內(nèi)容是 v num END 7 1PL SQL簡(jiǎn)介 4 范例 編寫PL SQL塊 輸入一個(gè)雇員編號(hào) 而后取得指定的雇員姓名 Declarev enonumber v enamevarchar2 10 BeginV eno 7 1PL SQL簡(jiǎn)介 5 7 2變量的聲明與賦值 變量聲明并使用變量 變量名稱可以有字母 數(shù)字 等組成 所有變量名稱要求以字母開頭 不能是Oracle中的保留字 變量的長(zhǎng)度最多只能為30個(gè)字符 變量不區(qū)分大小寫 6 7 2變量的聲明與賦值 聲明變量語(yǔ)法 變量名稱 CONSTANT 類型 notNULL value 使用 TYPE聲明變量類型 在編寫PL SQL程序時(shí) 如果希望某一個(gè)變量與指定數(shù)據(jù)表中某一列的類型一樣 則可以采用 變量定義 表名稱 表名稱 TYPE的格式 7 7 2變量的聲明與賦值 Declarev enoemp empno type v enameemp ename type BeginDBMS output put line 請(qǐng)輸入雇員編號(hào) v eno 8 7 2變量的聲明與賦值 使用 ROWTYPE聲明變量類型 PL SQL提供了一種 ROWTYPE 使用此標(biāo)記可以定義表中一行記錄的類型 當(dāng)用戶使用了 select into 將表中的一行記錄設(shè)置為ROWTYPE類型的變量中時(shí) 就可以利用 rowtype變量 表字段 的方式取得表中每行對(duì)應(yīng)的列數(shù)據(jù) 9 7 2變量的聲明與賦值 Declarev deptrowdept rowtype 裝載一行dept記錄Beginselect intov deptrowfromdeptwheredeptno 10 DBMS output put line 部門編號(hào) v deptrow deptno 名稱 v deptrow dname 位置 v deptrow loc End 10 7 3標(biāo)量類型 數(shù)值型 標(biāo)量類型 字符型 日期型 大對(duì)象 布爾 11 7 3標(biāo)量類型 12 7 3標(biāo)量類型 13 7 3標(biāo)量類型 14 7 3標(biāo)量類型 15 7 4程序結(jié)構(gòu) PL SQL程序與其他編程語(yǔ)言一樣 也擁有自己的3中程序結(jié)構(gòu) 即順序結(jié)構(gòu) 分支結(jié)構(gòu) 循環(huán)結(jié)構(gòu) 順序結(jié)構(gòu) 語(yǔ)句1 分支結(jié)構(gòu) 判斷條件 循環(huán)結(jié)構(gòu) 16 7 4 1分支結(jié)構(gòu) IF語(yǔ)句 17 7 4 1分支結(jié)構(gòu) 范例 查詢emp表的工資 輸入員工編號(hào) 根據(jù)編號(hào)查詢工資 如果工資高于3000元 則顯示高工資 如果工資大于2000元?jiǎng)t顯示中等工資 如果小于2000元 則顯示低工資 18 DECLAREv empSalemp sal TYPE 定義變量與emp sal字段類型相同v empNameemp ename TYPE 定義變量與emp ename字段類型相同v enoemp empno TYPE 定義變量與emp empno字段類型相同BEGINv eno 7 4 1分支結(jié)構(gòu) 19 范例 用戶輸入一個(gè)雇員編號(hào) 根據(jù)它所在的部門給上漲工資 規(guī)則 10部門上漲10 20上漲20 30上漲30 但是要求最高不能超過(guò)5000 超過(guò)5000就停留在5000 7 4 1分支結(jié)構(gòu) 20 7 4 1分支結(jié)構(gòu) DECLAREv empSalemp sal TYPE 定義變量與emp sal字段類型相同v dnoemp deptno TYPE 定義變量與emp deptno字段類型相同v enoemp empno TYPE 定義變量與emp empno字段類型相同BEGINv eno 21 7 4 1分支結(jié)構(gòu) CASE語(yǔ)句 Case語(yǔ)句是一種多條件的判斷語(yǔ)句 其功能與IF elseif else類似 Case語(yǔ)法 Case 變量 when 值 表達(dá)式 THEN執(zhí)行語(yǔ)句塊 when 值 表達(dá)式 THEN執(zhí)行語(yǔ)句塊 Else條件都不滿足時(shí)執(zhí)行語(yǔ)塊 Endcase 22 7 4 1分支結(jié)構(gòu) 范例 使用CASE進(jìn)行多條件判斷 DECLAREv salaryemp sal TYPE v enoemp empno TYPE BEGINv eno 23 7 4 1分支結(jié)構(gòu) 范例 輸入雇員編號(hào) 根據(jù)雇員的職位進(jìn)行工資提升 提升要求如下 如果職位是辦事員 CLERK 工資增長(zhǎng)5 如果職位是銷售人員 SALESMAN 工資增長(zhǎng)8 如果職位為經(jīng)理 MANAGER 工資增長(zhǎng)10 如果職位為分析員 ANALYST 工資增長(zhǎng)20 如果職位為總裁 PRESIDENT 工資不增長(zhǎng) 24 7 4 2循環(huán)結(jié)構(gòu) 在PL SQL程序中 循環(huán)結(jié)構(gòu)一共定義了兩種 及LOOP循環(huán)和for循環(huán) 其中 LOOP主要使用在不確定循環(huán)次數(shù)的操作中 而FOR使用在明確知道循環(huán)次數(shù)的操作中 25 7 4 2循環(huán)結(jié)構(gòu) For循環(huán)語(yǔ)法 FOR循環(huán)索引IN REVERSE 循環(huán)區(qū)域下限 循環(huán)區(qū)域上限LOOP循環(huán)執(zhí)行的語(yǔ)句塊 ENDLOOP 26 7 4 2循環(huán)結(jié)構(gòu) 范例 使用LOOP循環(huán) DECLAREv iNUMBER 1 定義一個(gè)變量 用于循環(huán)BEGINLOOPDBMS OUTPUT put line v i v i EXITWHENv i 3 v i v i 1 ENDLOOP END 27 7 4 2循環(huán)結(jié)構(gòu) 范例 使用WHILE LOOP循環(huán) DECLAREv iNUMBER 1 定義一個(gè)變量 用于循環(huán)BEGINWHILE v i 3 LOOPDBMS OUTPUT put line v i v i v i v i 1 ENDLOOP END 28 7 4 2循環(huán)結(jié)構(gòu) 范例 使用FOR循環(huán) DECLAREv iNUMBER 1 定義一個(gè)變量 用于循環(huán)BEGINFORv iIN1 3LOOPDBMS OUTPUT put line v i v i ENDLOOP END 29 7 4 2循環(huán)結(jié)構(gòu) 循環(huán)控制 在正常循環(huán)操作中 如果需要結(jié)束循環(huán)或者退出當(dāng)前循環(huán) 可以使用EXIT與CONTINUE語(yǔ)句來(lái)完成 范例 使用EXIT結(jié)束循環(huán)操作 DECLAREv iNUMBER 1 定義一個(gè)變量 用于循環(huán)BEGINFORv iIN1 10LOOPIFv i 3THEN 當(dāng)v i變量增長(zhǎng)到3時(shí)結(jié)束循環(huán)EXIT ENDIF DBMS OUTPUT put line v i v i ENDLOOP END 30 7 4 2循環(huán)結(jié)構(gòu) 循環(huán)控制 范例 使用CONTINUE控制循環(huán)操作 DECLAREv iNUMBER 1 定義一個(gè)變量 用于循環(huán)BEGINFORv iIN1 10LOOPIFMOD v i 2 0THEN 為偶數(shù)的時(shí)候不執(zhí)行后續(xù)方法體CONTINUE ENDIF DBMS OUTPUT put line v i v i ENDLOOP END 31 7 5內(nèi)部程序塊 對(duì)每個(gè)PL SQL程序塊 其基本的組成部分就是DECLARE BEGIN END 如果用戶有需要 也可以在一個(gè)程序中定義多個(gè)子程序模塊 語(yǔ)法如下 DECLARE 聲明部分 例如定義變量 常量 游標(biāo)BEGIN 程序編寫 SQL語(yǔ)句 DECLARE 子程序編寫 SQL語(yǔ)句EXCEPTION 子程序處理異常END EXCEPTION 異常處理END 32 7 5內(nèi)部程序塊 范例 定義內(nèi)部程序塊 DECLAREv xNUMBER 30 此為全局變量BEGINDECLAREv xVARCHAR2 40 MLDNJAVA 此為局部變量 只能在內(nèi)部程序塊中使用v yNUMBER 20 BEGINDBMS OUTPUT put line 內(nèi)部程序塊輸出 v x v x DBMS OUTPUT put line 內(nèi)部程序塊輸出 v y v y END DBMS OUTPUT put line 外部程序塊輸出 v x v x END 33 7 6異常處理 程序開發(fā)中會(huì)由于設(shè)計(jì)錯(cuò)誤 編碼錯(cuò)誤 硬件故障或其他原因奇異程序運(yùn)行出錯(cuò) PL SQL中的異常處理機(jī)制 使得在出現(xiàn)錯(cuò)誤的時(shí)候程序仍能執(zhí)行 異常類型 編譯型異常 程序語(yǔ)法出現(xiàn)錯(cuò)誤導(dǎo)致的異常 運(yùn)行型異常 程序語(yǔ)法沒(méi)有語(yǔ)法錯(cuò)誤 但因?yàn)槌绦蜻\(yùn)算或者返回結(jié)果而出現(xiàn)錯(cuò)誤 34 7 6異常處理 異常處理語(yǔ)法 WHEN異常類型 用戶定義異常 異常代碼 OTHERSTHEN異常處理 在一個(gè)EXCEPTION語(yǔ)句塊中可以同時(shí)編寫多個(gè)WHEN 用于判斷不同的異常類型 異??梢允窍到y(tǒng)定義的 也可以用戶自定義的異常類型 35 7 6異常處理 常見預(yù)定義異常 36 7 6異常處理 范例 處理SQL異常 找不到數(shù)據(jù) DECLAREv enoemp empno TYPE v enameemp ename TYPE BEGINv eno 37 7
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 油氣泄漏海水凈化技術(shù)
- 油庫(kù)管理制度
- 代養(yǎng)贍養(yǎng)入住協(xié)議(含個(gè)性化服務(wù))
- 研發(fā)中心廠房及研發(fā)設(shè)備整體轉(zhuǎn)讓合同范本
- 健康食品銷售代理及品牌授權(quán)承包合同
- 高端餐飲企業(yè)人才引進(jìn)與勞動(dòng)合同規(guī)范
- 管道桁架維修方案
- 小區(qū)水箱維修方案
- 寄賣回收運(yùn)營(yíng)方案
- 大水管廢物改造方案
- 2024-2030年中國(guó)獨(dú)立學(xué)院行業(yè)轉(zhuǎn)型挑戰(zhàn)分析發(fā)展規(guī)劃研究報(bào)告
- 中?!峨姽せA(chǔ)》課程標(biāo)準(zhǔn)
- 歷年全國(guó)普通話考試真題50套
- 他汀不耐受的臨床診斷與處理中國(guó)專家共識(shí)(2024)解讀課件
- 2024年7月國(guó)家開放大學(xué)法學(xué)本科《知識(shí)產(chǎn)權(quán)法》期末考試試題及答案
- 2024移動(dòng)金融客戶端應(yīng)用軟件安全管理規(guī)范標(biāo)準(zhǔn)
- DB43T 876.8-2015 高標(biāo)準(zhǔn)農(nóng)田建設(shè) 第8部分:科技服務(wù)
- 2025版《新亮劍》高中物理:第九章 靜電場(chǎng)及其應(yīng)用 靜電場(chǎng)中的能量含答案
- 普通洗車操作流程及操作指導(dǎo)書
- 40000平方米人民醫(yī)院項(xiàng)目監(jiān)理招標(biāo)文件
- 2024年遼寧電工(高級(jí)技師)高頻核心題庫(kù)300題(含解析)
評(píng)論
0/150
提交評(píng)論