PL/SQL學習筆記(一)
斷斷續續學過,這次係統地來讀讀。
(一)
PL/SQL是oracle在標準SQL語言上的過程性擴展,它不僅允許嵌入SQL語句,而且允許定義變量和常量,允許過程語言結構(條件語句和循環語句),允許使用異常處理oracle錯誤等。通過使用PL/SQL,可以在一個PL/SQL塊中包含多條SQL語句和PL/SQL語句。PL/SQL具有以下優點:
1。提高應用係統的運行性能。
通過使用PL/SQL塊包含多條SQL語句,從而減少了SQL語句的發送次數,降低了網絡開銷,提高了應用程序性能
2。提供模塊化的程序設計功能。
將企業規則和商業邏輯集成到PL/SQL子程序當中,提供給客戶端調用,簡化了客戶端應用程序的開發和維護工作,降低了耦合度
3。允許定義標識符,允許定義變量、常量、遊標和異常等標識符
4。具有過程語言控製結構,允許使用條件分支語句和循環語句
5。具有良好的兼容性,在允許運行oracle的任何平台上執行,不僅在數據庫服務端執行,也可以在oracle提供的工具中開發PL/SQL
6。處理運行錯誤,使用PL/SQL提供的EXCEPTION,開發人員可以集中處理各種oracle錯誤和PL/SQL錯誤,簡化了錯誤處理。
(二)
PL/SQL塊的概念:
Block是PL/SQL的基本單元,編寫PL/SQL本質上就是編寫PL/SQL塊,塊的嵌套層次沒有限製。
1。塊的結構:塊由3部分組成
DECLARE 
定義部分——定義常量,變量,遊標,異常,複雜數據類型等
BEGIN 
執行部分
EXCEPTION
異常處理部分

END ; /**/ /* 塊結束標誌 */
其中隻有執行部分是必須的!
2。分類:
1)匿名塊,匿名塊是指沒有名稱的PL/SQL塊,可以內嵌到應用程序中,如:
declare
v_name VARCHAR2 ( 10 );
BEGIN
select name into v_name from test where name =& no;
dbms_output.put_line( ' 名字: ' || v_name);
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line( ' 找不到該名字 ' );
end ;
2)命名塊:與匿名塊相似,使用命名塊主要是為了區分多級嵌套關係,如:
<< out >> 
declare
v_name VARCHAR2 ( 10 );
BEGIN 
<< inner >> 
begin 
null ;
end ;
-- <<inner>>
select name into v_name from test where name =& no;
dbms_output.put_line( ' 名字: ' || v_name);
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line( ' 找不到該名字 ' );
end ; -- <<outer>>
3)子程序,又可以分成3種:過程、函數和包
A。過程用於執行特定操作,當建立過程時既可以指定輸入參數,也可以指定輸出參數,從而在應用環境和程序間傳遞數據,使用CREATE PROCEDURE語句,如:
create or replace PROCEDURE update_test(id2 NUMBER ,money2 LONG )
is
e_no_row EXCEPTION;
begin
update test set money = money2 where id = id2;
if SQL % NOTFOUND THEN
RAISE e_no_row;
end if ;
EXCEPTION
WHEN e_no_row THEN
raise_application_error( - 20004 , ' 該test不存在 ' );
end update_test;
B)函數,與過程主要不同是函數需要返回數據,在函數頭和函數體都必須有RETURN語句,如:
create or replace FUNCTION get_long(name2 VARCHAR2 )
RETURN LONG IS
avg_money NUMBER ;
begin
select money into avg_money from test where name = name2;
RETURN avg_money;
end ;
C)包,類似JAVA包的概念,包含兩部分,包規範和包體,包規範相當於C++中的頭文件聲明子程序,而包體包含這些子程序的具體實現。調用包中的子程序時,需要 ‘包名.子程序名’ 這樣的形式調用
4。觸發器是指隱含執行的存儲過程,定義觸發器需要指定觸發事件和觸發操作,常見觸發事件如insert,update,delete等,使用CREATE TRIGGER命令建立
文章轉自莊周夢蝶 ,原文發布時間5.17
最後更新:2017-05-17 11:05:16