版權(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ù)開(kāi)發(fā)技術(shù)數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)福建工程學(xué)院第10章 PL/SQL編程基礎(chǔ)1數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT 本章要點(diǎn)本章要點(diǎn)編寫(xiě)編寫(xiě)PL/SQLPL/SQL匿名塊匿名塊聲明聲明PL/SQL PL/SQL 變量、常量、數(shù)據(jù)類型變量、常量、數(shù)據(jù)類型介紹賦值語(yǔ)句和算術(shù)運(yùn)算符介紹賦值語(yǔ)句和算術(shù)運(yùn)算符理解理解%TYPE%TYPE屬性屬性掌握各種變量的范圍和使用掌握各種變量的范圍和使用如何在如何在PL/SQLPL/SQL塊中編寫(xiě)可執(zhí)行的代碼塊中編寫(xiě)可執(zhí)行的代碼 掌握掌握DBMS_OUTPUTDBMS_OUTPUT包與輸入輸出包與輸入輸出嵌套塊應(yīng)遵循的規(guī)則嵌套塊應(yīng)遵循的規(guī)則 準(zhǔn)備編寫(xiě)簡(jiǎn)單的準(zhǔn)備編寫(xiě)簡(jiǎn)單的PL/SQLPL
2、/SQL塊塊數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT什么是什么是PL/SQL PL/SQL(Procedural language/SQL)是過(guò)程語(yǔ)言是過(guò)程語(yǔ)言(Procedural Language)與結(jié)構(gòu)化查詢語(yǔ)言與結(jié)構(gòu)化查詢語(yǔ)言(SQL)結(jié)合而結(jié)合而成的編程語(yǔ)言。成的編程語(yǔ)言。 PL/SQL 是對(duì)是對(duì) SQL 的擴(kuò)展的擴(kuò)展 PL/SQL支持現(xiàn)代軟件工程的很多重要特征,支持現(xiàn)代軟件工程的很多重要特征, 如如: 數(shù)據(jù)封裝、面向?qū)ο缶幊蹋〝?shù)據(jù)封裝、面向?qū)ο缶幊蹋∣OP)、錯(cuò)誤(例外)處、錯(cuò)誤(例外)處理和信息隱藏等。理和信息隱藏等。 PL/SQL是一種是一種“后臺(tái)技術(shù)后臺(tái)技術(shù)”,它的輸入輸出是面向,它的輸入輸出
3、是面向 數(shù)據(jù)庫(kù)的,主要用于編寫(xiě)服務(wù)器端的程序。數(shù)據(jù)庫(kù)的,主要用于編寫(xiě)服務(wù)器端的程序。數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT什么是什么是PL/SQL 支持多種數(shù)據(jù)類型,如大對(duì)象和集合類型,可使用條件和支持多種數(shù)據(jù)類型,如大對(duì)象和集合類型,可使用條件和循環(huán)等控制結(jié)構(gòu),給循環(huán)等控制結(jié)構(gòu),給SQL語(yǔ)句的執(zhí)行添加程序邏輯。語(yǔ)句的執(zhí)行添加程序邏輯。 PL/SQL是是Oracle數(shù)據(jù)庫(kù)的核心編程語(yǔ)言,用于編數(shù)據(jù)庫(kù)的核心編程語(yǔ)言,用于編 寫(xiě)存儲(chǔ)過(guò)程、函數(shù)、觸發(fā)器、包,面向?qū)ο髷?shù)據(jù)庫(kù)的寫(xiě)存儲(chǔ)過(guò)程、函數(shù)、觸發(fā)器、包,面向?qū)ο髷?shù)據(jù)庫(kù)的 類的定義等等。類的定義等等。 與與 Oracle 服務(wù)器和服務(wù)器和 Oracle 工具緊密集成,
4、具備可移植工具緊密集成,具備可移植性、靈活性和安全性。性、靈活性和安全性。數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/SQL簡(jiǎn)介簡(jiǎn)介支持支持 SQL,在,在 PL/SQL 中可以使用:中可以使用:數(shù)據(jù)操縱命令數(shù)據(jù)操縱命令事務(wù)控制命令事務(wù)控制命令游標(biāo)控制游標(biāo)控制SQL 函數(shù)和函數(shù)和 SQL 運(yùn)算符運(yùn)算符可移植性,可運(yùn)行在任何操作系統(tǒng)和平臺(tái)上的可移植性,可運(yùn)行在任何操作系統(tǒng)和平臺(tái)上的Oralce 數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)更佳的性能,更佳的性能,PL/SQL 經(jīng)過(guò)編譯執(zhí)行經(jīng)過(guò)編譯執(zhí)行安全性,可以通過(guò)存儲(chǔ)過(guò)程限制用戶對(duì)數(shù)據(jù)的訪問(wèn)安全性,可以通過(guò)存儲(chǔ)過(guò)程限制用戶對(duì)數(shù)據(jù)的訪問(wèn)用戶將整個(gè)語(yǔ)句塊發(fā)送給 OracleOracleProce
5、dureBegin ProcedureCall SQL Command End數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/SQL 簡(jiǎn)介簡(jiǎn)介PL/SQL 引擎駐留在引擎駐留在 Oracle 服務(wù)器中服務(wù)器中該引擎接受該引擎接受 PL/SQL 塊并對(duì)其進(jìn)行編譯執(zhí)行塊并對(duì)其進(jìn)行編譯執(zhí)行將PL/SQL 塊發(fā)送給 Oracle 服務(wù)器用戶用戶執(zhí)行過(guò)程語(yǔ)句引擎將 SQL 語(yǔ)句發(fā)送給SQL 語(yǔ)句執(zhí)行器Oracle 服務(wù)器PL/SQL引擎引擎SQL 語(yǔ)句執(zhí)行器過(guò)程語(yǔ)句過(guò)程語(yǔ)句執(zhí)行器執(zhí)行器執(zhí)行 SQL 語(yǔ)句將結(jié)果發(fā)送給用戶數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/SQL基本原理基本原理PL/SQL程序中可以使用大寫(xiě)或小寫(xiě)字母程序中可以使用大
6、寫(xiě)或小寫(xiě)字母一個(gè)完整的語(yǔ)句可以占若干行,但關(guān)鍵字不能被分開(kāi)寫(xiě)在兩一個(gè)完整的語(yǔ)句可以占若干行,但關(guān)鍵字不能被分開(kāi)寫(xiě)在兩行。行。PL/SQL語(yǔ)句包括保留字,標(biāo)識(shí)符,定界符,字面值和注釋語(yǔ)句包括保留字,標(biāo)識(shí)符,定界符,字面值和注釋保留字保留字(關(guān)鍵字):專門用途的單詞(關(guān)鍵字):專門用途的單詞用戶定義標(biāo)識(shí)符:用來(lái)命名變量、常量、過(guò)程、函數(shù)、游用戶定義標(biāo)識(shí)符:用來(lái)命名變量、常量、過(guò)程、函數(shù)、游標(biāo)、表、記錄和異常。標(biāo)、表、記錄和異常。字面值:數(shù)字類型,字符類型和布爾類型字面值:數(shù)字類型,字符類型和布爾類型注釋:注釋:對(duì)每個(gè)代碼段的目的和用途的描述對(duì)每個(gè)代碼段的目的和用途的描述數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/
7、SQL 塊的語(yǔ)法和原則塊的語(yǔ)法和原則標(biāo)識(shí)符標(biāo)識(shí)符至多有至多有30個(gè)字符個(gè)字符允許使用字母允許使用字母,數(shù)字?jǐn)?shù)字,$,#,_不能是保留字,但若保留字用雙引號(hào)標(biāo)明,不能是保留字,但若保留字用雙引號(hào)標(biāo)明,即可作為標(biāo)識(shí)符(例如,即可作為標(biāo)識(shí)符(例如,SELECT)。必須以字母開(kāi)頭必須以字母開(kāi)頭不允許與數(shù)據(jù)庫(kù)中表的列名相同不允許與數(shù)據(jù)庫(kù)中表的列名相同保留字應(yīng)為大寫(xiě)形式,以提高可讀性。保留字應(yīng)為大寫(xiě)形式,以提高可讀性。數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/SQL 塊的語(yǔ)法和原則塊的語(yǔ)法和原則字面值字面值 字面值是精確的數(shù)值、字符、串或布爾值。字面值是精確的數(shù)值、字符、串或布爾值。 字符或日期型文字必須用單引號(hào)標(biāo)識(shí)。
8、字符或日期型文字必須用單引號(hào)標(biāo)識(shí)。 數(shù)字可以是簡(jiǎn)單的值數(shù)字可以是簡(jiǎn)單的值(如如, 32.5) ,也可是用科學(xué)計(jì),也可是用科學(xué)計(jì)數(shù)法表示的數(shù)值數(shù)法表示的數(shù)值(如如, 2E5, 意義意義2*105= 200000) 。v_ename := Henderson;數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT注釋注釋在單行注釋前加前綴雙短線在單行注釋前加前綴雙短線 (- -)。多行注釋放在多行注釋放在 /* 和和 */之間。之間。舉例:用月工資計(jì)算年工資舉例:用月工資計(jì)算年工資.SET SERVEROUTPUT ON DECLARE v_sal NUMBER(9,2);BEGIN /* Compute the annual
9、salary based on the monthly salary input from the user */ v_sal := &monthly_sal * 12; DBMS_OUTPUT.PUT_LINE(The annual salary is |TO_CHAR(v_sal);END; - This is the end of the block/ 數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT在在PL/SQL中顯示輸出結(jié)果中顯示輸出結(jié)果vDBMS_OUTPUTDBMS_OUTPUT是是OracleOracle提供的包提供的包vDBMS_OUTPUTDBMS_OUTPUT包為包為PL/SQLPL/S
10、QL程序提供了對(duì)一個(gè)內(nèi)部緩沖區(qū)的輸程序提供了對(duì)一個(gè)內(nèi)部緩沖區(qū)的輸入輸出功能入輸出功能vDBMS_OUTPUTDBMS_OUTPUT包中的過(guò)程實(shí)現(xiàn)了兩個(gè)基本操作:包中的過(guò)程實(shí)現(xiàn)了兩個(gè)基本操作:GET GET 和和 PUTPUTvPUTPUT操作是將過(guò)程參數(shù)中的數(shù)據(jù)放入到一個(gè)內(nèi)部緩沖區(qū)中,操作是將過(guò)程參數(shù)中的數(shù)據(jù)放入到一個(gè)內(nèi)部緩沖區(qū)中,而而GETGET操作則是從這個(gè)緩沖區(qū)中讀出數(shù)據(jù),并將其內(nèi)容作為操作則是從這個(gè)緩沖區(qū)中讀出數(shù)據(jù),并將其內(nèi)容作為參數(shù)值返回參數(shù)值返回DBMS_OUTPUT包與輸入輸出包與輸入輸出數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT在在PL/SQL中顯示輸出結(jié)果中顯示輸出結(jié)果v要使用該方法顯示輸出數(shù)據(jù)
11、,必須將環(huán)境變量作如下的設(shè)置: SET SERVEROUTPUT ON vDBMS_OUTPUT.PUT(字符串表達(dá)式);用于輸出字符串,但不換行,括號(hào)中的參數(shù)是要輸出的字符串表達(dá)式。用于輸出字符串,但不換行,括號(hào)中的參數(shù)是要輸出的字符串表達(dá)式。vDBMS_OUTPUT.PUT_LINE(字符串表達(dá)式);用于輸出一行字符串信息,并換行,括號(hào)中的參數(shù)是要輸出的字符串表用于輸出一行字符串信息,并換行,括號(hào)中的參數(shù)是要輸出的字符串表達(dá)式。達(dá)式。vDBMS_OUTPUT.NEW_LINE;用來(lái)輸出一個(gè)換行,沒(méi)有參數(shù)。用來(lái)輸出一個(gè)換行,沒(méi)有參數(shù)。 DBMS_OUTPUT包與輸入輸出包與輸入輸出數(shù)據(jù)庫(kù)開(kāi)發(fā)
12、技術(shù)FJUT注釋、替換變量與注釋、替換變量與DBMS_OUTPUT包使用實(shí)例包使用實(shí)例SET SERVEROUTPUT ONDECLARE v_sal NUMBER(9,2);BEGIN /* SQL中的替換變量在中的替換變量在PL/SQL中仍然有效中仍然有效 */ v_sal:= &monthly_sal*12;-不需要在程序塊中聲明替換變量不需要在程序塊中聲明替換變量 DBMS_OUTPUT.PUT_LINE(The annual salary is | TO_CHAR(v_sal);END;/以下程序只能在以下程序只能在sql-plus環(huán)境中運(yùn)行環(huán)境中運(yùn)行數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTP
13、L/SQL中的中的SQL函數(shù)函數(shù)過(guò)程語(yǔ)句中的有效函數(shù)過(guò)程語(yǔ)句中的有效函數(shù):單行數(shù)字單行數(shù)字 單行字符單行字符數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換日期日期過(guò)程語(yǔ)句中的無(wú)效函數(shù)過(guò)程語(yǔ)句中的無(wú)效函數(shù):DECODE分組函數(shù)。分組函數(shù)僅在分組函數(shù)。分組函數(shù)僅在PL/SQL塊中的塊中的SQL語(yǔ)句中適用。語(yǔ)句中適用。與與 SQL中同中同 數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/SQL 函數(shù)函數(shù)PL/SQL 提供了大量的有效函數(shù)用來(lái)處理數(shù)據(jù),這些函數(shù)提供了大量的有效函數(shù)用來(lái)處理數(shù)據(jù),這些函數(shù)有以下幾類:有以下幾類:l 錯(cuò)誤報(bào)告函數(shù)(錯(cuò)誤報(bào)告函數(shù)(Error reporting)l 數(shù)字函數(shù)(數(shù)字函數(shù)(Number)l 字符函數(shù)(字符
14、函數(shù)(Character)l 轉(zhuǎn)換函數(shù)(轉(zhuǎn)換函數(shù)(Conversion)l 日期函數(shù)(日期函數(shù)(Date)l 雜項(xiàng)函數(shù)(雜項(xiàng)函數(shù)(Miscellaneous)數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/SQL 函數(shù)函數(shù)例:給一個(gè)公司創(chuàng)建一個(gè)通信地址.把員工名轉(zhuǎn)換成小寫(xiě)形式.v_mailing_address := v_name|CHR(10)| v_address|CHR(10)|v_state| CHR(10)|v_zip;v_ename:= LOWER(v_ename);注解:注解:CHR 是一個(gè)SQL函數(shù),把ASCII碼轉(zhuǎn)換成相應(yīng)的字符-。數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT數(shù)據(jù)類型轉(zhuǎn)換函數(shù)數(shù)據(jù)類型轉(zhuǎn)換函數(shù)把數(shù)據(jù)轉(zhuǎn)換
15、成可比較的數(shù)據(jù)類型。把數(shù)據(jù)轉(zhuǎn)換成可比較的數(shù)據(jù)類型。混合的數(shù)據(jù)類型可能會(huì)出現(xiàn)錯(cuò)誤,影響性能混合的數(shù)據(jù)類型可能會(huì)出現(xiàn)錯(cuò)誤,影響性能轉(zhuǎn)換函數(shù)轉(zhuǎn)換函數(shù):TO_CHARTO_DATETO_NUMBERDECLARE v_date VARCHAR2(15);BEGIN SELECT TO_CHAR(hiredate, MON. DD, YYYY) INTO v_date FROM emp WHERE empno = 7839;END;數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT數(shù)據(jù)類型轉(zhuǎn)換函數(shù)數(shù)據(jù)類型轉(zhuǎn)換函數(shù)l如果variable v_date 被聲明為DATE型,該語(yǔ)句就會(huì)產(chǎn)生一個(gè)編譯錯(cuò)誤。v_date := January
16、 13, 1998; v_date := TO_DATE (January 13, 1998, Month DD, YYYY);l使用TO_DATE 轉(zhuǎn)換函數(shù)可改正錯(cuò)誤。數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/SQL 塊結(jié)構(gòu)塊結(jié)構(gòu)DECLARE 可選可選變量、游標(biāo)、例外聲明變量、游標(biāo)、例外聲明用戶自定義的特殊類型用戶自定義的特殊類型BEGIN 必須必須SQL 語(yǔ)句語(yǔ)句PL/SQL 語(yǔ)句語(yǔ)句EXCEPTION 可選可選錯(cuò)誤發(fā)生時(shí)的處理動(dòng)作錯(cuò)誤發(fā)生時(shí)的處理動(dòng)作END; 必須必須DECLAREBEGINEXCEPTIONEND;PL/SQL是塊結(jié)構(gòu)化語(yǔ)言是塊結(jié)構(gòu)化語(yǔ)言,即程序能被分成若干個(gè)邏輯塊。愉中即程序能被
17、分成若干個(gè)邏輯塊。愉中對(duì)象有自己的作用域。對(duì)象有自己的作用域。一個(gè)一個(gè)PL/SQL塊有三個(gè)部分構(gòu)成:聲明(可選)塊有三個(gè)部分構(gòu)成:聲明(可選),執(zhí)行執(zhí)行(必須必須) 和和 異常處理異常處理 (可選可選)。數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT可選的可選的該部分給出當(dāng)在執(zhí)行部分發(fā)生錯(cuò)誤該部分給出當(dāng)在執(zhí)行部分發(fā)生錯(cuò)誤或出現(xiàn)異常情況或出現(xiàn)異常情況時(shí)的具體處理動(dòng)作時(shí)的具體處理動(dòng)作 。可嵌套塊。可嵌套塊。異常處理異常處理部分部分必須的必須的 該部分包括該部分包括SQL語(yǔ)句(用于處理數(shù)語(yǔ)句(用于處理數(shù)據(jù)庫(kù)中的數(shù)據(jù))及據(jù)庫(kù)中的數(shù)據(jù))及PL/SQL語(yǔ)句(用語(yǔ)句(用于處理塊中的數(shù)據(jù))。于處理塊中的數(shù)據(jù))。可嵌套塊??汕短讐K。執(zhí)
18、行部分執(zhí)行部分可選的可選的該部分包括所有在聲明、執(zhí)行部分該部分包括所有在聲明、執(zhí)行部分所用到的變量、常量、游標(biāo)以及用所用到的變量、常量、游標(biāo)以及用戶自定義的特殊類型。戶自定義的特殊類型。聲明部分聲明部分備注備注描述描述塊結(jié)構(gòu)塊結(jié)構(gòu)PL/SQL 塊結(jié)構(gòu)塊結(jié)構(gòu)數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/SQL 塊結(jié)構(gòu)塊結(jié)構(gòu)DECLARE v_variable VARCHAR2(5);BEGIN SELECT column_name INTO v_variable FROM table_name;EXCEPTION WHEN exception_name THEN .END;數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/SQL 塊結(jié)
19、構(gòu)塊結(jié)構(gòu)PL/SQL 塊是構(gòu)成塊是構(gòu)成 PL/SQL 程序的基本單元程序的基本單元將邏輯上相關(guān)的聲明和語(yǔ)句組合在一起將邏輯上相關(guān)的聲明和語(yǔ)句組合在一起 寫(xiě)一個(gè)簡(jiǎn)單的寫(xiě)一個(gè)簡(jiǎn)單的PL/SQL過(guò)程過(guò)程,輸出輸出Hello World!set serveroutput onbegin dbms_output.put_line(Hello World!);end;/當(dāng)該塊成功執(zhí)行,沒(méi)有任何未經(jīng)處理的錯(cuò)誤和編譯錯(cuò)誤時(shí),將會(huì)顯示如下語(yǔ)當(dāng)該塊成功執(zhí)行,沒(méi)有任何未經(jīng)處理的錯(cuò)誤和編譯錯(cuò)誤時(shí),將會(huì)顯示如下語(yǔ)句句 :PL/SQL 過(guò)程已成功完成。過(guò)程已成功完成。PL/SQL procedure successful
20、ly completed 數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT塊包括兩種類型:匿名塊和命名塊塊包括兩種類型:匿名塊和命名塊匿名塊匿名塊匿名塊是沒(méi)有被命名的塊。他們是在應(yīng)用程序即將執(zhí)行時(shí)匿名塊是沒(méi)有被命名的塊。他們是在應(yīng)用程序即將執(zhí)行時(shí)被聲明,在運(yùn)行期間被傳遞給被聲明,在運(yùn)行期間被傳遞給PL/SQL引擎執(zhí)行。引擎執(zhí)行。命名塊命名塊子程序是被命名的子程序是被命名的 PL/SQL 塊,能接收參數(shù),能被調(diào)用塊,能接收參數(shù),能被調(diào)用。子程序存儲(chǔ)在服務(wù)器或應(yīng)用程序?qū)又?。子程序存?chǔ)在服務(wù)器或應(yīng)用程序?qū)又?。它可以聲明為過(guò)程它可以聲明為過(guò)程(procedure)也可以為函數(shù)也可以為
21、函數(shù)(function),通常僅執(zhí)行一動(dòng)作時(shí)定義為過(guò)程,計(jì)算值時(shí)定義為函數(shù),通常僅執(zhí)行一動(dòng)作時(shí)定義為過(guò)程,計(jì)算值時(shí)定義為函數(shù)。包。包(package)是由一組過(guò)程和函數(shù)組成。觸發(fā)器是由一組過(guò)程和函數(shù)組成。觸發(fā)器(trigger)是由是由DML語(yǔ)句以隱含方式調(diào)用的一個(gè)塊。語(yǔ)句以隱含方式調(diào)用的一個(gè)塊。附注:函數(shù)類似于過(guò)程,只是函數(shù)必須返回一個(gè)值。附注:函數(shù)類似于過(guò)程,只是函數(shù)必須返回一個(gè)值。 塊的類型塊的類型數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT塊的類型塊的類型匿名塊匿名塊 過(guò)程過(guò)程 函數(shù)函數(shù)數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT程序結(jié)構(gòu)程序結(jié)構(gòu)數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTDeveloper/2000組件組件-例如,表單例如,表單PL
22、/SQL塊,與應(yīng)用程序有關(guān);能塊,與應(yīng)用程序有關(guān);能自動(dòng)執(zhí)行。自動(dòng)執(zhí)行。應(yīng)用程序應(yīng)用程序觸發(fā)器觸發(fā)器Oracle服務(wù)器服務(wù)器PL/SQL塊,與數(shù)據(jù)庫(kù)中的表有關(guān)塊,與數(shù)據(jù)庫(kù)中的表有關(guān);由;由DML語(yǔ)句觸發(fā),自動(dòng)執(zhí)行。語(yǔ)句觸發(fā),自動(dòng)執(zhí)行。數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)觸發(fā)器觸發(fā)器Oracle服務(wù)器和服務(wù)器和Developer/2000組件組件-例如,表單例如,表單有命名的有命名的PL/SQL模塊,是一組相模塊,是一組相關(guān)的過(guò)程、函數(shù)和標(biāo)識(shí)符。關(guān)的過(guò)程、函數(shù)和標(biāo)識(shí)符。包包Developer/2000組件組件-例如,表單例如,表單有命名的有命名的PL/SQL塊,存儲(chǔ)在塊,存儲(chǔ)在Developer/2000應(yīng)用程序中或被
23、應(yīng)用程序中或被庫(kù)共享;可通過(guò)名字被重復(fù)調(diào)用。庫(kù)共享;可通過(guò)名字被重復(fù)調(diào)用。應(yīng)用程序中的應(yīng)用程序中的過(guò)程過(guò)程/函數(shù)函數(shù)Oracle服務(wù)器服務(wù)器有命名的有命名的PL/SQL塊;存儲(chǔ)在塊;存儲(chǔ)在Oracle服務(wù)器中;能接受參數(shù);可服務(wù)器中;能接受參數(shù);可通過(guò)名字被重復(fù)調(diào)用。通過(guò)名字被重復(fù)調(diào)用。已存儲(chǔ)的已存儲(chǔ)的過(guò)程過(guò)程/函數(shù)函數(shù)所有所有PL/SQL環(huán)境環(huán)境未被命名的未被命名的PL/SQL塊;可嵌入到塊;可嵌入到應(yīng)用程序中亦可交互使用。應(yīng)用程序中亦可交互使用。匿名塊匿名塊適用性適用性描述描述程序結(jié)構(gòu)程序結(jié)構(gòu)數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTTRUE變量類型 P20025-OCT-99Atlanta“Four sco
24、re and seven years agoour fathers brought forth uponthis continent, a new nation,conceived in LIBERTY, and dedicatedto the proposition that all menare created equal.”256120.08數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/SQl數(shù)據(jù)類型和操作符PL/SQL 支持的內(nèi)置數(shù)據(jù)類型支持的內(nèi)置數(shù)據(jù)類型數(shù)據(jù)類型數(shù)據(jù)類型引用類型%ROWTYPE標(biāo)量類型數(shù)字字符布爾型日期時(shí)間LOB類型BFILEBLOBCLOBNCLOB%TYPE提供某個(gè)變量或數(shù)據(jù)庫(kù)表列
25、的數(shù)據(jù)類型提供表示表中一行的記錄類型 復(fù)合類型數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/SQl數(shù)據(jù)類型和操作符數(shù)據(jù)類型和操作符指定數(shù)值的存儲(chǔ)格式指定數(shù)值的存儲(chǔ)格式BINARY_INTEGER(-231=1231-1)INTEGERINTSMALLINTPOSTIVE 0231 不能為空NATURAL 1231 不能為空PLS_INTEGERNUMBERDEC(定點(diǎn)數(shù))DECIMAL (定點(diǎn)數(shù))NUMERIC (定點(diǎn)數(shù))FLOAT (浮點(diǎn)數(shù))REAL (浮點(diǎn)數(shù))DOUBLE PRECISION (浮點(diǎn)數(shù))數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/SQl數(shù)據(jù)類型和操作符數(shù)據(jù)類型和操作符字符數(shù)據(jù)類型包括:字符數(shù)據(jù)類型包括:CH
26、ARVARCHAR2LONGRAWLONG RAWPL/SQL 的數(shù)據(jù)類型與的數(shù)據(jù)類型與 SQL數(shù)據(jù)類型的比較數(shù)據(jù)類型的比較數(shù)據(jù)類型數(shù)據(jù)類型SQL類型類型PL/SQL類型類型CHAR1.20001.32767LONG1.2GB1.32760LONG RAW1.2GB1.32760RAW1.20001.32767VARCHAR21.40001.32767數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/SQl數(shù)據(jù)類型和操作符數(shù)據(jù)類型和操作符用于引用數(shù)據(jù)庫(kù)列的數(shù)據(jù)類型,以及表示表中一行用于引用數(shù)據(jù)庫(kù)列的數(shù)據(jù)類型,以及表示表中一行的記錄類型的記錄類型屬性類型有兩種:屬性類型有兩種:%TYPE - 引用變量和數(shù)據(jù)庫(kù)列的數(shù)據(jù)
27、類型引用變量和數(shù)據(jù)庫(kù)列的數(shù)據(jù)類型%ROWTYPE - 提供表示表中一行的記錄類型提供表示表中一行的記錄類型使用屬性類型的優(yōu)點(diǎn):使用屬性類型的優(yōu)點(diǎn):不需要知道被引用的表列的具體類型不需要知道被引用的表列的具體類型如果被引用對(duì)象的數(shù)據(jù)類型發(fā)生改變,如果被引用對(duì)象的數(shù)據(jù)類型發(fā)生改變,PL/SQL 變量的數(shù)據(jù)類型也隨之改變變量的數(shù)據(jù)類型也隨之改變bh emp.empno%TYPE;emp_rec scott.emp%ROWTYPE;數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT變量的使用變量的使用 PL/SQL 中可以聲明變量,繼而在中可以聲明變量,繼而在SQL中使用它們,中使用它們,也可在任一過(guò)程語(yǔ)句的表達(dá)式中使用。也可在
28、任一過(guò)程語(yǔ)句的表達(dá)式中使用。數(shù)據(jù)的臨時(shí)存儲(chǔ)數(shù)據(jù)的臨時(shí)存儲(chǔ)l在數(shù)據(jù)流過(guò)程執(zhí)行之前需輸入合法的數(shù)據(jù),這些在數(shù)據(jù)流過(guò)程執(zhí)行之前需輸入合法的數(shù)據(jù),這些數(shù)據(jù)將被暫時(shí)存放在一個(gè)或多個(gè)變量中。數(shù)據(jù)將被暫時(shí)存放在一個(gè)或多個(gè)變量中。對(duì)其值的操作對(duì)其值的操作l無(wú)須訪問(wèn)數(shù)據(jù)庫(kù),通過(guò)變量就可進(jìn)行計(jì)算和對(duì)其無(wú)須訪問(wèn)數(shù)據(jù)庫(kù),通過(guò)變量就可進(jìn)行計(jì)算和對(duì)其他數(shù)據(jù)操作。他數(shù)據(jù)操作。 重復(fù)使用重復(fù)使用l 變量一經(jīng)聲明,就可在應(yīng)用程序中重復(fù)使用。簡(jiǎn)變量一經(jīng)聲明,就可在應(yīng)用程序中重復(fù)使用。簡(jiǎn)單地通過(guò)引用,其他語(yǔ)句(包括其他的聲明語(yǔ)句單地通過(guò)引用,其他語(yǔ)句(包括其他的聲明語(yǔ)句)即可重復(fù)使用這些變量。)即可重復(fù)使用這些變量。易于維護(hù)易于維
29、護(hù) 數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/SQL變量定義變量定義PL/SQL 塊中可以使用變量和常量塊中可以使用變量和常量在聲明部分聲明,使用前必須先聲明在聲明部分聲明,使用前必須先聲明聲明時(shí)必須指定數(shù)據(jù)類型,每行聲明一個(gè)標(biāo)識(shí)符聲明時(shí)必須指定數(shù)據(jù)類型,每行聲明一個(gè)標(biāo)識(shí)符在可執(zhí)行部分的在可執(zhí)行部分的 SQL 語(yǔ)句和過(guò)程語(yǔ)句中使用語(yǔ)句和過(guò)程語(yǔ)句中使用聲明變量和常量的語(yǔ)法:聲明變量和常量的語(yǔ)法:給變量賦值有兩種方法:給變量賦值有兩種方法:使用賦值語(yǔ)句使用賦值語(yǔ)句 :=使用使用 SELECT INTO 語(yǔ)句語(yǔ)句數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/SQL中的變量的操作中的變量的操作在聲明部分聲明并初始化變量。在聲明部分聲
30、明并初始化變量。在執(zhí)行部分為變量指派新值。在執(zhí)行部分為變量指派新值。通過(guò)參數(shù)把值傳遞給通過(guò)參數(shù)把值傳遞給PL/SQL塊。塊。通過(guò)輸出變量顯示結(jié)果。通過(guò)輸出變量顯示結(jié)果。作用:變量主要用于程序與數(shù)據(jù)庫(kù)之間的數(shù)據(jù)作用:變量主要用于程序與數(shù)據(jù)庫(kù)之間的數(shù)據(jù)交換以及保存程序的中間結(jié)果。交換以及保存程序的中間結(jié)果。數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT變量的類型變量的類型PL/SQL變量變量標(biāo)量型標(biāo)量型復(fù)合型復(fù)合型引用型引用型LOB型型 (大型的對(duì)象大型的對(duì)象)外部變量外部變量綁定變量和主變量綁定變量和主變量主要的標(biāo)量數(shù)據(jù)類型: VARCHAR2 (最大長(zhǎng)度) NUMBER (精度, 刻度) DATE CHAR (最大長(zhǎng)
31、度) LONG LONG RAW BOOLEAN BINARY_INTEGER PLS_INTEGER數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT聲明聲明 PL/SQL 變量變量identifier CONSTANT datatype NOT NULL := | DEFAULT expr;Declare v_hiredateDATE; v_deptnoNUMBER(2) NOT NULL := 10; v_locationVARCHAR2(13) := Atlanta; c_ commCONSTANT NUMBER := 1400; 數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT聲明聲明 PL/SQL變量變量 規(guī)則規(guī)則 遵循命名的慣例。遵
32、循命名的慣例。 可以按習(xí)慣命名可以按習(xí)慣命名例如例如 v_name 代表一個(gè)變量和代表一個(gè)變量和 c_name代表一個(gè)常變量代表一個(gè)常變量, g_ 代表代表 global 變量。變量。 初始化初始化NOT NULL型變量。型變量。 用賦值操作符用賦值操作符(:=) 或用或用DEFAULT關(guān)鍵字給變量賦初始值。關(guān)鍵字給變量賦初始值。 每行至多聲明一個(gè)標(biāo)識(shí)符。每行至多聲明一個(gè)標(biāo)識(shí)符。 聲明常量時(shí),必須在類型說(shuō)明符之前標(biāo)明關(guān)鍵字聲明常量時(shí),必須在類型說(shuō)明符之前標(biāo)明關(guān)鍵字CONSTANT ,并給該常量賦初值。并給該常量賦初值。數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT命名規(guī)則命名規(guī)則不同塊中的兩個(gè)變量可以同名。不同塊中的
33、兩個(gè)變量可以同名。變量的名字(標(biāo)識(shí)符)不能與塊中表的列同變量的名字(標(biāo)識(shí)符)不能與塊中表的列同名。名。DECLARE empnoNUMBER(4);BEGIN SELECT empno INTO empno FROMemp WHERE ename = SMITH;END;數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT變量的賦值變量的賦值v_ename := Maduro;v_hiredate := 31-DEC-98;identifier := expr;數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT變量的初始化和關(guān)鍵字變量的初始化和關(guān)鍵字使用使用:= (賦值操作符)(賦值操作符)DEFAULT(缺?。ㄈ笔。㎞OT NULL(非空)(非空
34、)數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT標(biāo)量類型標(biāo)量類型l僅有一個(gè)值l內(nèi)部沒(méi)有分量25-OCT-99Atlanta“Four score and seven years ago our fathers brought forth upon this continent, a new nation, conceived in LIBERTY, and dedicated to the proposition that all men are created equal.”TRUE256120.08數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT基本標(biāo)量類型基本標(biāo)量類型VARCHAR2 (最大長(zhǎng)度最大長(zhǎng)度)NUMBER (精度精度, 刻度
35、刻度)DATECHAR (最大長(zhǎng)度最大長(zhǎng)度)LONGLONG RAWBOOLEANBINARY_INTEGERPLS_INTEGER數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT數(shù)據(jù)類型數(shù)據(jù)類型描述描述VARCHAR2(最大長(zhǎng)度最大長(zhǎng)度)變長(zhǎng)字符的基本類型,最大的存儲(chǔ)數(shù)據(jù)是變長(zhǎng)字符的基本類型,最大的存儲(chǔ)數(shù)據(jù)是32767字節(jié)。字節(jié)。 VARCHAR2型的變量和常量沒(méi)有默認(rèn)的長(zhǎng)度。型的變量和常量沒(méi)有默認(rèn)的長(zhǎng)度。NUMBER (精度精度, 刻度刻度)整數(shù)和浮點(diǎn)數(shù)的基本類型。整數(shù)和浮點(diǎn)數(shù)的基本類型。DATE日期和時(shí)間的基本類型。日期和時(shí)間的基本類型。DATE類型來(lái)存儲(chǔ)包含從一天的午夜開(kāi)始的類型來(lái)存儲(chǔ)包含從一天的午夜開(kāi)始的定長(zhǎng)
36、的時(shí)間。有效的時(shí)間范圍是從公元前定長(zhǎng)的時(shí)間。有效的時(shí)間范圍是從公元前4712年年1月月1號(hào)開(kāi)始到號(hào)開(kāi)始到公元公元9999年年12月月31號(hào)。號(hào)。CHAR (最大長(zhǎng)度最大長(zhǎng)度)固定長(zhǎng)度字符數(shù)據(jù)的基本類型,最大有固定長(zhǎng)度字符數(shù)據(jù)的基本類型,最大有32767字節(jié)。如果沒(méi)有指定字節(jié)。如果沒(méi)有指定的最大值,缺省值為的最大值,缺省值為1。LONG變長(zhǎng)字符串的基本類型,最大長(zhǎng)度是變長(zhǎng)字符串的基本類型,最大長(zhǎng)度是32760字節(jié)。字節(jié)。LONG型的數(shù)據(jù)型的數(shù)據(jù)庫(kù)列的最大長(zhǎng)度是庫(kù)列的最大長(zhǎng)度是2147483647字節(jié)。字節(jié)。LONG RAW二進(jìn)制數(shù)據(jù)和字節(jié)字符串的基本類型,最大字節(jié)為二進(jìn)制數(shù)據(jù)和字節(jié)字符串的基本類
37、型,最大字節(jié)為32760。PL/SQL不能解釋不能解釋 LONG RAW 型的數(shù)據(jù)。型的數(shù)據(jù)。BOOLEAN存儲(chǔ)邏輯值存儲(chǔ)邏輯值TRUE、FALSE和和 NULL 的基本類型。的基本類型。BINARY_INTEGER介于介于-2147483647和和2147483647之間有符號(hào)整數(shù)的基本類型。之間有符號(hào)整數(shù)的基本類型。與與NUMBER相比,相比,BINARY_INTEGE占有較少的存儲(chǔ)空間占有較少的存儲(chǔ)空間PLS_INTEGER介于介于-2147483647和和2147483647之間有符號(hào)整數(shù)的基本類型。之間有符號(hào)整數(shù)的基本類型。與與NUMBER 和和 BINARY_INTEGER相比,相
38、比,PLS_INTEGER占有占有較少的存儲(chǔ)空間且運(yùn)行效率高。較少的存儲(chǔ)空間且運(yùn)行效率高。數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT標(biāo)量型變量的聲明標(biāo)量型變量的聲明v_jobVARCHAR2(9);v_countBINARY_INTEGER := 0;v_total_salNUMBER(9,2) := 0;v_orderdateDATE := SYSDATE + 7;c_tax_rateCONSTANT NUMBER(3,2) := 8.25;v_validBOOLEAN NOT NULL := TRUE;舉例數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT變量常量聲明、初始化和賦值變量常量聲明、初始化和賦值DECLARE V_A1 NU
39、MBER; V_A2 NUMBER NOT NULL :=2000; V_A3 CONSTANT NUMBER :=3000; V_A4 CONSTANT NUMBER DEFAULT 4000; V_A5 NUMBER; BEGIN V_A1:=1000; SELECT SAL INTO V_A5 FROM EMP WHERE EMPNO=7876; INSERT INTO T VALUES(V_A1); INSERT INTO T VALUES(V_A2); INSERT INTO T VALUES(V_A3); INSERT INTO T VALUES(V_A4); INSERT INT
40、O T VALUES(V_A5); END;/ 變量不可以與塊中涉及的列同名 變量聲明在DECLARE之后; 變量聲明時(shí)如果不賦值,其值為NULL; 變量聲明時(shí)如果設(shè)置為NOT NULL, 則一定要在聲明時(shí)使用“:=”或者 “DEFAULT”賦初值。 變量在程序體中可以用“:=”或者 “SELECT INTO”賦值 常量聲明時(shí)一定要賦值,在程序中只能 引用,不能修改數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT%TYPE 的屬性的屬性聲明的變量對(duì)應(yīng)于聲明的變量對(duì)應(yīng)于: 數(shù)據(jù)庫(kù)的列數(shù)據(jù)庫(kù)的列其它先前聲明過(guò)的變量其它先前聲明過(guò)的變量在在 %TYPE前綴上前綴上:數(shù)據(jù)庫(kù)中表和列名
41、數(shù)據(jù)庫(kù)中表和列名先前聲明過(guò)的變量名先前聲明過(guò)的變量名優(yōu)點(diǎn):優(yōu)點(diǎn): 利于書(shū)寫(xiě)和維護(hù)代碼利于書(shū)寫(xiě)和維護(hù)代碼, 因?yàn)椴槐匾驍?shù)據(jù)庫(kù)中列的修改而因?yàn)椴槐匾驍?shù)據(jù)庫(kù)中列的修改而去修改去修改PL/SQL塊。塊。 能和表中列的數(shù)據(jù)類型保持一致能和表中列的數(shù)據(jù)類型保持一致 可以與先前聲明過(guò)的變量保持一致可以與先前聲明過(guò)的變量保持一致數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT用用%TYPE聲明變量聲明變量舉例舉例. v_enameemp.ename%TYPE; v_balanceNUMBER(7,2); v_min_balancev_balance%TYPE := 10;.數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT聲明布爾型變量聲明布爾型變量布爾型變
42、量?jī)H有三個(gè)值布爾型變量?jī)H有三個(gè)值TRUE、FALSE和和NULL.布爾型變量由邏輯運(yùn)算符布爾型變量由邏輯運(yùn)算符AND、 OR和和NOT連接連接.布爾型變量輸出三個(gè)值布爾型變量輸出三個(gè)值 TRUE、 FALSE或或 NULL.算術(shù)、字符和日期表達(dá)式可以返回一個(gè)布爾值。算術(shù)、字符和日期表達(dá)式可以返回一個(gè)布爾值。數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT 復(fù)合類型復(fù)合類型類型類型PL/SQL 表表 (tables)PL/SQL 記錄記錄 (records)PL/SQL 可變數(shù)組可變數(shù)組 (varrays)數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTLOB 型變量型變量數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT鍵盤輸入鍵盤輸入(替換變量替換變量)鍵盤輸入是通過(guò)在
43、變量名前面加一個(gè)鍵盤輸入是通過(guò)在變量名前面加一個(gè)“&”符號(hào)實(shí)現(xiàn)符號(hào)實(shí)現(xiàn)的,如:的,如:&V_INPUT。如果此變量是數(shù)值型(如:。如果此變量是數(shù)值型(如:number,integer等),在提示輸入時(shí)直接輸入數(shù)等),在提示輸入時(shí)直接輸入數(shù)據(jù);如果此變量是字符型(如:據(jù);如果此變量是字符型(如:varchar2()等),等),有兩個(gè)辦法輸入:有兩個(gè)辦法輸入:如果書(shū)寫(xiě)時(shí)是:如果書(shū)寫(xiě)時(shí)是:&V_INPUT,那么輸入時(shí)要加單引,那么輸入時(shí)要加單引號(hào)號(hào)“”把字符串引起來(lái);把字符串引起來(lái);如果書(shū)寫(xiě)時(shí)是:如果書(shū)寫(xiě)時(shí)是:&V_INPUT,那么輸入時(shí)不要加,那么輸入時(shí)不要加單引號(hào)
44、,直接輸入字符串。單引號(hào),直接輸入字符串。數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT外部變量外部變量(綁定變量綁定變量)Server外部變量是在某一程序的主環(huán)境下聲明的一種變量,用來(lái)外部變量是在某一程序的主環(huán)境下聲明的一種變量,用來(lái)把運(yùn)行時(shí)的值(可以是數(shù)字、字符)傳入或傳出一個(gè)或把運(yùn)行時(shí)的值(可以是數(shù)字、字符)傳入或傳出一個(gè)或更多更多PL/SQL程序,在這個(gè)程序中可以像其他變量一樣程序,在這個(gè)程序中可以像其他變量一樣使用外部變量。在主環(huán)境或一個(gè)調(diào)用環(huán)境(可以是由過(guò)使用外部變量。在主環(huán)境或一個(gè)調(diào)用環(huán)境(可以是由過(guò)程、函數(shù)或包的程、函數(shù)或包的PL/SQL語(yǔ)句調(diào)用的)下,聲明外部變語(yǔ)句調(diào)用的)下,聲明外部變量,之后就可
45、引用這些外部變量了。量,之后就可引用這些外部變量了。數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT外部變量外部變量(綁定變量綁定變量) 外部變量是在程序運(yùn)行的主環(huán)境中定義的變量外部變量是在程序運(yùn)行的主環(huán)境中定義的變量 在在PL/SQL中引用外部變量需要在外部變量前加中引用外部變量需要在外部變量前加”:” 在在PL/SQL中可以象使用自己的變量一樣使用外部變量。中可以象使用自己的變量一樣使用外部變量。 外部變量使得外部變量使得PL/SQL可以與主機(jī)環(huán)境之間傳遞數(shù)據(jù)可以與主機(jī)環(huán)境之間傳遞數(shù)據(jù) 應(yīng)盡量減少使用外部變量,因?yàn)樗麜?huì)影響性能。為了盡量減應(yīng)盡量減少使用外部變量,因?yàn)樗麜?huì)影響性能。為了盡量減少對(duì)主機(jī)的呼叫,可以將變量
46、的值賦給局部變量。少對(duì)主機(jī)的呼叫,可以將變量的值賦給局部變量。數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT引用外部變量引用外部變量SQL VARIABLE emp_num NUMBER -定義定義SQL*PLUS中的變量中的變量SQL BEGIN 2 SELECT COUNT(*) INTO :emp_num 3 FROM emp; 4 END; 5 /PL/SQL 過(guò)程已成功完成。過(guò)程已成功完成。SQL PRINT emp_num -在在SQL*PLUS中顯示變量中顯示變量 EMP_NUM- 13在SQL*PLUS環(huán)境中:數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT嵌套塊和變量的作用域嵌套塊和變量的作用域只要可執(zhí)行的語(yǔ)句能運(yùn)行,其所在
47、的塊就能只要可執(zhí)行的語(yǔ)句能運(yùn)行,其所在的塊就能被嵌套。被嵌套。一個(gè)嵌套塊可看作是一個(gè)語(yǔ)句。一個(gè)嵌套塊可看作是一個(gè)語(yǔ)句。異常處理部分可以包含若干嵌套塊。異常處理部分可以包含若干嵌套塊。一個(gè)對(duì)象的作用域是指所涉及到該對(duì)象的程一個(gè)對(duì)象的作用域是指所涉及到該對(duì)象的程序的區(qū)域。序的區(qū)域。數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT嵌套塊和變量的作用域嵌套塊和變量的作用域一個(gè)標(biāo)識(shí)符只有在它的作用域中用一個(gè)不限定一個(gè)標(biāo)識(shí)符只有在它的作用域中用一個(gè)不限定的名字來(lái)引用時(shí)才是可見(jiàn)的的名字來(lái)引用時(shí)才是可見(jiàn)的:塊可以由內(nèi)向外查找標(biāo)識(shí)符。塊可以由內(nèi)向外查找標(biāo)識(shí)符。 (如在嵌套塊如在嵌套塊的父塊中的聲明部分進(jìn)行查找的父塊中的聲明部分進(jìn)行查找)
48、塊不可以由外向內(nèi)查找標(biāo)識(shí)符。塊不可以由外向內(nèi)查找標(biāo)識(shí)符。(如不會(huì)向如不會(huì)向內(nèi)在其子塊或其兄弟塊中查找)內(nèi)在其子塊或其兄弟塊中查找)附注附注: 可以使用塊標(biāo)簽作為前綴限定一個(gè)標(biāo)識(shí)符。數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT嵌套塊和變量的作用域嵌套塊和變量的作用域. x BINARY_INTEGER;BEGIN . DECLARE y NUMBER; BEGIN . END; .END; x的范圍的范圍Y的范圍的范圍舉例舉例數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUT決定變量的作用域決定變量的作用域本課習(xí)題本課習(xí)題.DECLARE V_SALNUMBER(7,2) := 60000; V_COMMNUMBER(7,2) := V_SAL
49、 * .20; V_MESSAGEVARCHAR2(255) := eligible for commission;BEGIN . DECLARE V_SALNUMBER(7,2) := 50000; V_COMM NUMBER(7,2) := 0; V_TOTAL_COMPNUMBER(7,2) := V_SAL + V_COMM; BEGIN . V_MESSAGE := CLERK not|V_MESSAGE; END; V_MESSAGE := SALESMAN|V_MESSAGE;END;習(xí)題1. 子塊中的 V_MESSAGE.2. 主塊中的 V_TOTAL_COMP.3. 子塊中的 V_COMM .4. 主塊中的 V_COMM.5. 主塊中的V_MESSAGE .數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)FJUTPL/SQL中的運(yùn)算符中的運(yùn)算符邏輯運(yùn)算符邏輯運(yùn)算符算術(shù)運(yùn)算符算術(shù)運(yùn)算符連接運(yùn)算符連接運(yùn)算符 控制運(yùn)算符次序的括號(hào)控制運(yùn)算符次序的括號(hào)求冪運(yùn)算符求冪運(yùn)算符 (*)與與SQL中同中同數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)
溫馨提示
- 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年石棉摩擦制品項(xiàng)目可行性研究報(bào)告
- 2025至2031年中國(guó)電動(dòng)玩具飛機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年橡膠發(fā)泡墊項(xiàng)目可行性研究報(bào)告
- 2025至2031年中國(guó)手搖交直流發(fā)電機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年履帶式自動(dòng)數(shù)粒包裝線項(xiàng)目可行性研究報(bào)告
- 2025年交變負(fù)荷試驗(yàn)機(jī)項(xiàng)目可行性研究報(bào)告
- 2025年202含氫硅油項(xiàng)目可行性研究報(bào)告
- 2025至2030年金屬沙發(fā)項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年蓄熱瓷管項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年電動(dòng)日期編碼機(jī)項(xiàng)目投資價(jià)值分析報(bào)告
- 贏在團(tuán)隊(duì)執(zhí)行力課件
- 慢性胰腺炎課件
- 北京理工大學(xué)應(yīng)用光學(xué)課件第四章
- 陰道鏡幻燈課件
- 2022年山東司法警官職業(yè)學(xué)院?jiǎn)握姓Z(yǔ)文試題及答案解析
- PCB行業(yè)安全生產(chǎn)常見(jiàn)隱患及防范措施課件
- DB32∕T 186-2015 建筑消防設(shè)施檢測(cè)技術(shù)規(guī)程
- 2022年福建泉州中考英語(yǔ)真題【含答案】
- 汽車座椅骨架的焊接夾具畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(共23頁(yè))
- 露天礦山職業(yè)危害預(yù)先危險(xiǎn)分析表
- 淺談固定資產(chǎn)的審計(jì)
評(píng)論
0/150
提交評(píng)論