PL/SQL編程
一:什么是PL/SQL
(1.)PL/SQL體系結構:
PL/SQL引擎用來編譯和執行,PL/SQL塊或子程序,該引擎駐留在Oracle服務器中。
(2.)PL/SQL塊簡介
PL/SQL是一種塊結構語音,它將一組語句塊放在一個快中。
(3.)運算符和表達式:
PL/SQL語音支持操作符包含關系運算符,一般運算符和邏輯運算符,與SQL語音類似。
(4.)常量和變量聲明
在PL/SQL塊的可執行部分引用變量和常量前,必須先對其進行聲明。變量和PL/SQL塊的部分聲明,在PL/SQ塊的 可執行部分被使用。語法如下:
Variable_name data_type 變量范圍 變量的初始值;
(5.)注釋:
在PL/SQL可以使用如下兩種注釋符號:
‘--’雙減號
‘//’
在PL/SQL快中的可執行部分引用的變量和常量前,必須先對其聲明
語法:variable_name data_type[(size)][:=init_value];
變量名稱 數據類型 size 指定變量的初始值
二:PL/SQL數據類型
(1.)Oracle使用變量類型圖
(2.)LOB數據類型
(3.)屬性類型:
%Type:定義一個變量,其數據類型與已經定義的某個數據變量(尤其是表的某一列)的數據類型相一致這時可以使用%Type (優點:可以不必知道所引用的數據庫列的數據類型。所引用的數據類型可以實現時改變,容易保持一致,不必修改PL/SQL程序)
%ROWTYPE:返回一個記錄類型,其數據類型和數據庫表的數據結構相一致,這時可以使用%ROWTYPE.(優點:可以不必知道所引用數據庫列的個數和數據類型。所引用的數據庫中列的個數和數據庫類型可以實現改變,容易保持一致,不用修改PL/SQL程序)
三:PL/SQL控制語句
(1.)條件控制:if語句如下:
If 布爾表達式 then
PL/SQL和SQL語句
End if;
If 布爾表達式 then
PL/SQL和SQL語句
Elst
其他語句
End if;
If 布爾表達式 then
PL/SQL和SQL語句
Elsif 其他布爾表達式 then
其他語句
Elsif 其他布爾表達式 then
Else
其他語句
End if;
(2.)case 語法如下
----------------格式1----------------
Case 條件表達式
When 條件表達式1 then
語句段1
When 條件表達式2 then
語句段2
…………….
When 條件表達式n then
語句段n
End case;
----------------格式2----------------
Case 條件表達式
When 條件表達式1 then
語句段1
When 條件表達式2 then
語句段2
…………….
When 條件表達式n then
語句段n
Else 語句段
End case;
(3.)循環控制:Loop循環語法如下:
Loop
要執行的語句;
Exit when 條件語句 -------條件滿足時跳出循環
End loop;
While循環語法如下:
While 布爾表達式 loop
要執行的語句;
End loop;
For循環語法如下
For 循環計數器 In reverse 下限…….上限 loop
要執行的語句
End loop;
四:異常處理:
(1.)預定義異常:
(2.)處理用戶自定義異常:
在PL/SQL塊的定義部分定義的異常情況
異常情況 exceptlon
拋出異常情況:
Raise 異常情況
在PL/SQL塊的異常情況處理部分對異常情況做出的相應處理
五:游標:
(2.)游標的分類
隱式游標:返回單行記錄
顯示游標:返回多行記錄
顯示游標使用步驟:
(1.)聲明游標:cursor 名稱 is
(2.)打開游標:open 名稱;
(3.)提取游標:fetch 名稱 into variables;
(4.)關閉游標: close 名稱;
(3.)使用循環游標簡化游標的讀取語法:
For 聲明記錄變量 in 名稱
Loop
Executable_statements
End loop;
(4.)No_data_found和notfound的區別
Select………into語句返回0條記錄和多條記錄是觸發no_data_found
當update或delete語句的where子句未找到時,觸發%notfound
在提取循環中用%notfound或%found來確定循環的退出條件,而不用no_data_fuond
六:存儲過程:
子程序的組成:
(1.)聲明部分:類型,游標,常量,變量,異常,嵌套子程序聲明
(2.)可執行部分:可執行部分包括賦值,控制執行過程存儲過程中出現的異常
(3.)異常處理部分:異常處理程序,負責處理執行存儲過程中出現的異常。
子程序的優點如下:
模塊化,可重用性,可維護性,安全性。
(4.)存儲過程用法:
1.創建存儲過程:語法如下:
Create 語句 procedure 存儲名稱
參數列表
Is|as
局部聲明
Begin
可執行語句
exception
異常處理程序
End 存儲名稱;
2.調用存儲過程
(1.)用命令調用
語法如下:
Exce 過程名稱 參數列表;
(2.)參數的傳遞方式三種:
按位置傳遞
Exec add_emp(1111,‘mary’,2000,’‘manager’,10);
按名稱傳遞
混合方式傳遞
3.存儲過程參數模式語法如下:
存儲名稱 in|out|in out datatype :=賦值;
4.存儲過程訪問權限
-----授予a執行emp的權限
Grant execute no add_emp to a
-------撤銷權限
Revoke execute on add_emp from a;
5.刪除存儲過程
Drop procedure 存儲名稱;
七:存儲過程的調試與跟蹤:
(1.)在sql*plus下調試
(2.)用戶PL/SQL Developer工具調試
其中on_flag有三種情況:
0表示過程執行成功但無提示信息。大于0表示過程執行成功但有提示信息。
*小于1表示過程執行失敗且有提示信息。