




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、oracle PL/SQL的基本構(gòu)成,塊結(jié)構(gòu)和基本語法要求,數(shù)據(jù)類型,變量定義,運算符和函數(shù)關(guān)鍵字: oracle pl/sql 基本構(gòu)成 塊結(jié)構(gòu) 基本 語法 要求 數(shù)據(jù) 類型 變量 定義 運算符 函數(shù)特點PL/SQL語言是SQL語言的擴展,具有為程序開發(fā)而設(shè)計的特性,如數(shù)據(jù)封裝、異常處理、面向?qū)ο蟮忍匦?。PL/SQL是嵌入到Oracle服務(wù)器和開發(fā)工具中的,所以具有很高的執(zhí)行效率和同Oracle數(shù)據(jù)庫的完美結(jié)合。在PL/SQL模塊中可以使用查詢語句和數(shù)據(jù)操縱語句(即進行DML操作),這樣就可以編寫具有數(shù)據(jù)庫事務(wù)處理功能的模塊。至于數(shù)據(jù)定義(DDL)和數(shù)據(jù)控制(DCL)命令的處理,需要通過Or
2、acle提供的特殊的DMBS_SQL包來進行。PL/SQL還可以用來編寫過程、函數(shù)、包及數(shù)據(jù)庫觸發(fā)器。過程和函數(shù)也稱為子程序,在定義時要給出相應(yīng)的過程名和函數(shù)名。它們可以存儲在數(shù)據(jù)庫中成為存儲過程和存儲函數(shù),并可以由程序來調(diào)用,它們在結(jié)構(gòu)上同程序模塊類似。PL/SQL過程化結(jié)構(gòu)的特點是:可將邏輯上相關(guān)的語句組織在一個程序塊內(nèi);通過嵌入或調(diào)用子塊,構(gòu)造功能強大的程序;可將一個復(fù)雜的問題分解成為一組便于管理、定義和實現(xiàn)的小塊。塊結(jié)構(gòu)和基本語法要求PL/SQL程序的基本單元是塊(BLOCK),塊就是實現(xiàn)一定功能的邏輯模塊。一個PL/SQL程序由一個或多個塊組成。塊有固定的結(jié)構(gòu),也可以嵌套。一個塊可以
3、包括三個部分,每個部分由一個關(guān)鍵字標(biāo)識。塊中各部分的作用解釋如下:(1) DECLARE:聲明部分標(biāo)志。(2) BEGIN:可執(zhí)行部分標(biāo)志。(3) EXCEPTION:異常處理部分標(biāo)志。(4) END;:程序結(jié)束標(biāo)志。在以下的訓(xùn)練中,將使用函數(shù)DBMS_OUTPUT.PUT_LINE顯示輸出結(jié)果。DBMS_OUTPUT是Oracle提供的包,該包有如下三個用于輸出的函數(shù),用于顯示PL/SQL程序模塊的輸出信息。第一種形式:DBMS_OUTPUT.PUT(字符串表達式);用于輸出字符串,但不換行,括號中的參數(shù)是要輸出的字符串表達式。第二種形式:DBMS_OUTPUT.PUT_LINE(字符串表達
4、式);用于輸出一行字符串信息,并換行,括號中的參數(shù)是要輸出的字符串表達式。第三種形式:DBMS_OUTPUT.NEW_LINE;用來輸出一個換行,沒有參數(shù)。調(diào)用函數(shù)時,在包名后面用一個點“.”和函數(shù)名分隔,表示隸屬關(guān)系。要使用該方法顯示輸出數(shù)據(jù),在SQL*Plus環(huán)境下要先執(zhí)行一次如下的環(huán)境設(shè)置命令:SET SERVEROUTPUT ON SIZE n用來打開DBMS_OUTPUT.PUT_LINE函數(shù)的屏幕輸出功能,系統(tǒng)默認狀態(tài)是OFF。其中,n表示輸出緩沖區(qū)的大小。n的范圍在20001 000 000之間,默認為2000。如果輸出內(nèi)容較多,需要使用SIZE n來設(shè)置較大的輸出緩沖區(qū)。在PL
5、/SQL模塊中可以使用查詢語句和數(shù)據(jù)操縱語句(即進行DML操作),所以PL/SQL程序是同SQL語言緊密結(jié)合在一起的。在PL/SQL程序中,最常見的是使用SELECT語句從數(shù)據(jù)庫中獲取信息,同直接執(zhí)行SELECT語句不同,在程序中的SELECT語句總是和INTO相配合,INTO后跟用于接收查詢結(jié)果的變量,形式如下:SELECT 列名1,列名2. INTO 變量1,變量2. FROM 表名 WHERE 條件;注意:接收查詢結(jié)果的變量類型、順序和個數(shù)同SELECT語句的字段的類型、順序和個數(shù)應(yīng)該完全一致。并且SELECT語句返回的數(shù)據(jù)必須是一行,否則將引發(fā)系統(tǒng)錯誤。當(dāng)程序要接收返回的多行結(jié)果時,可
6、以采用后面介紹的游標(biāo)的方法。使用INSERT、DELETE和UPDATE的語法沒有變化,但在程序中要注意判斷語句執(zhí)行的狀態(tài),并使用COMMIT或ROLLBACK進行事務(wù)處理。以下訓(xùn)練包含了按照標(biāo)準(zhǔn)結(jié)構(gòu)書寫的一個包含SELECT語句的PL/SQL程序示例?!居?xùn)練1】 查詢雇員編號為7788的雇員姓名和工資。步驟1:用SCOTT賬戶登錄SQL*Plus。步驟2:在輸入?yún)^(qū)輸入以下程序:Sql代碼1. /*這是一個簡單的示例程序*/2. SETSERVEROUTPUTON3. DECLARE-定義部分標(biāo)識4. v_nameVARCHAR2(10);-定義字符串變量v_name5. v_salNUMBE
7、R(5);-定義數(shù)值變量v_sal6. BEGIN-可執(zhí)行部分標(biāo)識7. SELECTename,sal8. INTOv_name,v_sal9. FROMemp10. WHEREempno=7788;11. -在程序中插入的SQL語句12. DBMS_OUTPUT.PUT_LINE(7788號雇員是:|v_name|,工資為:|to_char(v_sal);13. -輸出雇員名和工資14. END;-結(jié)束標(biāo)識步驟3:按執(zhí)行按鈕或F5快捷鍵執(zhí)行程序。輸出的結(jié)果是:Sql代碼1. 7788號雇員是:SCOTT,工資為:30002. PL/SQL過程已成功完成。以上程序的作用是,查詢雇員編號為778
8、8的雇員姓名和工資,然后顯示輸出。這種方法同直接在SQL環(huán)境下執(zhí)行SELECT語句顯示雇員的姓名和工資比較,程序變得更復(fù)雜。那么兩者究竟有什么區(qū)別呢?SQL查詢的方法,只限于SQL環(huán)境,并且輸出的格式基本上是固定的。而程序通過把數(shù)據(jù)取到變量中,可以進行復(fù)雜的處理,完成SQL語句不能實現(xiàn)的功能,并通過多種方式輸出?!?”是注釋符號,后邊是程序的注釋部分。該部分不編譯執(zhí)行,所以在輸入程序時可以省略。/*.*/中間也是注釋部分,同“-”注釋方法不同,它可以跨越多行進行注釋。PL/SQL程序的可執(zhí)行語句、SQL語句和END結(jié)束標(biāo)識都要以分號結(jié)束。數(shù)據(jù)類型變量的基本數(shù)據(jù)類型同SQL部分的字段數(shù)據(jù)類型相一
9、致,但是也有不同,具體看附件里的圖片。NUMBER和VARCHAR2是最常用的數(shù)據(jù)類型。VARCHAR2是可變長度的字符串,定義時指明最大長度,存儲數(shù)據(jù)的長度是在最大長度的范圍自動調(diào)節(jié)的,數(shù)據(jù)前后的空格,Oracle 9i會自動將其刪去。NUMBER型可以定義數(shù)值的總長度和小數(shù)位,如NUMBER(10,3)表示定義一個寬度為10、小數(shù)位為3的數(shù)值。整個寬度減去小數(shù)部分的寬度為整數(shù)部分的寬度,所以整數(shù)部分的寬度為7。CHAR數(shù)據(jù)類型為固定長度的字符串,定義時要指明寬度,如不指明,默認寬度為1。定長字符串在顯示輸出時,有對齊的效果。 DATE類型用于存儲日期數(shù)據(jù),內(nèi)部使用7個字節(jié)。其中包括年、月、
10、日、小時、分鐘和秒數(shù)。默認的格式為DD-MON-YY,如:07-8月-03表示2003年8月7日。BOOLEAN為布爾型,用于存儲邏輯值,可用于PL/SQL的控制結(jié)構(gòu)。LOB數(shù)據(jù)類型可以存儲視頻、音頻或圖片,支持隨機訪問,存儲的數(shù)據(jù)可以位于數(shù)據(jù)庫內(nèi)或數(shù)據(jù)庫外,具體有四種類型:BFILE、BLOB、CLOB、NCLOB。但是操縱大對象需要使用Oracle提供的DBMS_LOB包。變量定義1變量定義變量的作用是用來存儲數(shù)據(jù),可以在過程語句中使用。變量在聲明部分可以進行初始化,即賦予初值。變量在定義的同時也可以將其說明成常量并賦予固定的值。變量的命名規(guī)則是:以字母開頭,后跟其他的字符序列,字符序列中
11、可以包含字母、數(shù)值、下劃線等符號,最大長度為30個字符,不區(qū)分大小寫。不能使用Oracle的保留字作為變量名。變量名不要和在程序中引用的字段名相重,如果相重,變量名會被當(dāng)作列名來使用。變量的作用范圍是在定義此變量的程序范圍內(nèi),如果程序中包含子塊,則變量在子塊中也有效。但在子塊中定義的變量,僅在定義變量的子塊中有效,在主程序中無效。變量定義的方法是:變量名 CONSTANT 類型標(biāo)識符 NOT NULL:=值|DEFAULT 值;關(guān)鍵字CONSTANT用來說明定義的變量是常量,如果是常量,必須有賦值部分進行賦值。關(guān)鍵值NOT NULL用來說明變量不能為空。=或DEFAULT用來為變量賦初值。變量
12、可以在程序中使用賦值語句重新賦值。通過輸出語句可以查看變量的值。在程序中為變量賦值的方法是:變量名:=值 或 PL/SQL 表達式;以下是有關(guān)變量定義和賦值的練習(xí)。【訓(xùn)練1】 變量的定義和初始化。輸入和運行以下程序:Sql代碼1. SETSERVEROUTPUTON2. DECLARE-聲明部分標(biāo)識3. v_jobVARCHAR2(9);4. v_countBINARY_INTEGERDEFAULT0;5. v_total_salNUMBER(9,2):=0;6. v_dateDATE:=SYSDATE+7;7. c_tax_rateCONSTANTNUMBER(3,2):=8.25;8. v
13、_validBOOLEANNOTNULL:=TRUE;9. BEGIN10. v_job:=MANAGER;11. -在程序中賦值12. DBMS_OUTPUT.PUT_LINE(v_job);13. -輸出變量v_job的值14. DBMS_OUTPUT.PUT_LINE(v_count);15. -輸出變量v_count的值16. DBMS_OUTPUT.PUT_LINE(v_date);17. -輸出變量v_date的值18. DBMS_OUTPUT.PUT_LINE(c_tax_rate);19. -輸出變量c_tax_rate的值20. END;執(zhí)行結(jié)果:Sql代碼1. MANAGE
14、R2. 03. 18-4月-034. 8.255. PL/SQL過程已成功完成。說明:本訓(xùn)練共定義了6個變量,分別用“:=”賦值運算符或DEFAULT 關(guān)鍵字對變量進行了初始化或賦值。其中:c_tax_rate為常量,在數(shù)據(jù)類型前加了 “CONSTANT” 關(guān)鍵字;v_valid變量在賦值運算符前面加了關(guān)鍵字“NOT NULL”,強制不能為空。如果變量是布爾型,它的值只能是“TRUE”、“FALSE”或“NULL”。本練習(xí)中的變量v_valid布爾變量的值只能取“TRUE”或“FALSE”。2根據(jù)表的字段定義變量變量的聲明還可以根據(jù)數(shù)據(jù)庫表的字段進行定義或根據(jù)已經(jīng)定義的變量進行定義。方法是在表
15、的字段名或已經(jīng)定義的變量名后加 %TYPE,將其當(dāng)作數(shù)據(jù)類型。定義字段變量的方法如下:變量名 表名.字段名%TYPE;【訓(xùn)練2】 根據(jù)表的字段定義變量。輸入并執(zhí)行以下程序:Sql代碼1. SETSERVEROUTPUTON2. DECLARE3. v_enameemp.ename%TYPE;-根據(jù)字段定義變量4. BEGIN5. SELECTename6. INTOv_ename7. FROMemp8. WHEREempno=7788;9. DBMS_OUTPUT.PUT_LINE(v_ename);10. -輸出變量的值11. END;執(zhí)行結(jié)果:Sql代碼1. SCOTT2. PL/SQL過
16、程已成功完成。說明:變量v_ename是根據(jù)表emp的ename字段定義的,兩者的數(shù)據(jù)類型總是一致的。如果我們根據(jù)數(shù)據(jù)庫的字段定義了某一變量,后來數(shù)據(jù)庫的字段數(shù)據(jù)類型又進行了修改,那么程序中的該變量的定義也自動使用新的數(shù)據(jù)類型。使用該種變量定義方法,變量的數(shù)據(jù)類型和大小是在編譯執(zhí)行時決定的,這為書寫和維護程序提供了很大的便利。3結(jié)合變量的定義和使用我們還可以定義SQL*Plus環(huán)境下使用的變量,稱為結(jié)合變量。結(jié)合變量也可以在程序中使用,該變量是在整個SQL*Plus環(huán)境下有效的變量,在退出SQL*Plus之前始終有效,所以可以使用該變量在不同的程序之間傳遞信息。結(jié)合變量不是由程序定義的,而是使
17、用系統(tǒng)命令VARIABLE定義的。在SQL*Plus環(huán)境下顯示該變量要用系統(tǒng)的PRINT命令。在SQL*Plus環(huán)境下定義結(jié)合變量的方法如下:VARIABLE 變量名 數(shù)據(jù)類型【訓(xùn)練3】 定義并使用結(jié)合變量。步驟1:輸入和執(zhí)行下列命令,定義結(jié)合變量g_ename:Sql代碼1. VARIABLEg_enameVARCHAR2(100)步驟2:刪掉剛才輸入的語句,輸入和執(zhí)行下列程序:Sql代碼1. SETSERVEROUTPUTON2. BEGIN3. :g_ename:=:g_ename|Hello;4. -在程序中使用結(jié)合變量5. DBMS_OUTPUT.PUT_LINE(:g_ename)
18、;6. -輸出結(jié)合變量的值7. END;輸出結(jié)果:Sql代碼1. Hello2. PL/SQL過程已成功完成。步驟3:重新執(zhí)行程序。輸出結(jié)果:Sql代碼1. HelloHello2. PL/SQL過程已成功完成。步驟4:程序結(jié)束后用命令顯示結(jié)合變量的內(nèi)容:Sql代碼1. PRINTg_ename輸出結(jié)果:Sql代碼1. G_ENAME2. -3. HelloHello說明:g_ename為結(jié)合變量,可以在程序中引用或賦值,引用時在結(jié)合變量前面要加上“”。在程序結(jié)束后該變量的值仍然存在,其他程序可以繼續(xù)引用。4記錄變量的定義還可以根據(jù)表或視圖的一個記錄中的所有字段定義變量,稱為記錄變量。記錄變量
19、包含若干個字段,在結(jié)構(gòu)上同表的一個記錄相同,定義方法是在表名后跟%ROWTYPE。記錄變量的字段名就是表的字段名,數(shù)據(jù)類型也一致。記錄變量的定義方法是:記錄變量名 表名%ROWTYPE;獲得記錄變量的字段的方法是:記錄變量名.字段名,如emp_record.ename。如下練習(xí)中定義并使用了記錄變量?!居?xùn)練4】 根據(jù)表定義記錄變量。輸入并執(zhí)行如下程序:Sql代碼1. SETSERVEROUTPUTON2. DECLARE3. emp_recordemp%ROWTYPE;-定義記錄變量4. BEGIN5. SELECT*INTOemp_record6. FROMemp7. WHEREmpno=7
20、788;-取出一條記錄8. DBMS_OUTPUT.PUT_LINE(emp_record.ename);-輸出記錄變量的某個字段9. END;執(zhí)行結(jié)果為:Sql代碼1. SCOTT2. PL/SQL過程已成功完成。說明:在以上的練習(xí)中定義了記錄變量emp_record,它是根據(jù)表emp的全部字段定義的。SELECT語句將編號為7788的雇員的全部字段對應(yīng)地存入該記錄變量,最后輸出記錄變量的雇員名稱字段emp_record.ename的內(nèi)容。如果要獲得其他字段的內(nèi)容,比如要獲得編號為7788的雇員的工資,可以通過變量emp_record.sal獲得,依此類推。5TABLE類型變量在PL/SQL
21、中可以定義TABLE類型的變量。 TABLE數(shù)據(jù)類型用來存儲可變長度的一維數(shù)組數(shù)據(jù),即數(shù)組中的數(shù)據(jù)動態(tài)地增長。要定義TABLE變量,需要先定義TABLE數(shù)據(jù)類型。通過使用下標(biāo)來引用TABLE變量的元素。TABLE數(shù)據(jù)類型的定義形式如下:TYPE 類型名 IS TABLE OF 數(shù)據(jù)類型NOT NULL INDEX BY BINARY_INTEGER;此數(shù)據(jù)類型自動帶有BINARY_INTEGER型的索引。【訓(xùn)練5】 定義和使用TABLE變量:Sql代碼1. SETSERVEROUTPUTON2. DECLARE3. TYPEtype_tableISTABLEOFVARCHAR2(10)INDEXBYBINARY_INTEGER;-類型說明4. v_ttype_table;-定義TABLE變量5. BEGIN6. v_t(1):=MONDAY;7. v_t(2):=TUESDAY;8. v_t(3):=WEDNESDAY;9. v_t(4):=THURSDAY;10. v_t(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 統(tǒng)編版語文五年級下冊第13課《人物描寫一組》精美課件
- 江蘇省蘇州市園區(qū)2025年初三下學(xué)期2月月考生物試題含解析
- 全國18名校2025年(高三一模文)生物試題檢測試題試卷含解析
- 景德鎮(zhèn)學(xué)院《中藥與生藥學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 吉林省“五地六?!?025年高考數(shù)學(xué)試題考前模擬試題含解析
- 山西機電職業(yè)技術(shù)學(xué)院《建筑工程土建預(yù)算編制》2023-2024學(xué)年第二學(xué)期期末試卷
- 拉薩師范高等??茖W(xué)校《植物組織培養(yǎng)學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海行健職業(yè)學(xué)院《中國現(xiàn)代通俗文學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇護理職業(yè)學(xué)院《混凝土結(jié)構(gòu)基本》2023-2024學(xué)年第二學(xué)期期末試卷
- 西藏那曲地區(qū)2025屆三下數(shù)學(xué)期末質(zhì)量檢測試題含解析
- 安保人員安全培訓(xùn)課件
- 2025年中國光伏電池市場發(fā)展現(xiàn)狀調(diào)研及投資趨勢前景分析報告
- 2025年元宇宙+游戲行業(yè)新興熱點、發(fā)展方向、市場空間調(diào)研報告
- 問題等于機會的培訓(xùn)
- 森林管護員面試題及答案
- 人教版 七年級英語下冊 第二學(xué)期 期中綜合測試卷(2025年春)
- “中華傳統(tǒng)文化經(jīng)典研習(xí)”任務(wù)群下先秦諸子散文教學(xué)策略研究
- 2025年高考語文模擬作文導(dǎo)寫及點評:社會時鐘
- 《護理信息系統(tǒng)》課件
- 《疥瘡的防治及治療》課件
- 施工現(xiàn)場平面布置與臨時設(shè)施、臨時道路布置方案
評論
0/150
提交評論