閱讀76 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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部分組成

 

None.gifDECLARE  
None.gif
None.gif  定義部分——定義常量,變量,遊標,異常,複雜數據類型等
None.gif
None.gif
BEGIN
None.gif
None.gif  執行部分
None.gif
None.gifEXCEPTION
None.gif
None.gif  異常處理部分
None.gif
ExpandedBlockStart.gifContractedBlock.gif
END /**/ /* 塊結束標誌 */
None.gif

 

其中隻有執行部分是必須的!

2。分類:

1)匿名塊,匿名塊是指沒有名稱的PL/SQL塊,可以內嵌到應用程序中,如:

None.gifdeclare
None.gif    v_name 
VARCHAR2 ( 10 );
None.gif
None.gif
BEGIN
None.gif    
select  name  into  v_name  from  test  where  name =& no;
None.gif    dbms_output.put_line(
' 名字: ' || v_name);
None.gif    EXCEPTION
None.gif    
WHEN  NO_DATA_FOUND  THEN
None.gif    dbms_output.put_line(
' 找不到該名字 ' );
None.gif
end ;
None.gif
None.gif


2)命名塊:與匿名塊相似,使用命名塊主要是為了區分多級嵌套關係,如:

None.gif<< out >>
None.gif
None.gif
declare
None.gif    v_name 
VARCHAR2 ( 10 );
None.gif
None.gif
BEGIN
None.gif
None.gif    
<< inner >>
None.gif
None.gif    
begin
None.gif
None.gif           
null ;
None.gif
None.gif    
end ;
None.gif
None.gif    
-- <<inner>>
None.gif

None.gif    
None.gif    
select  name  into  v_name  from  test  where  name =& no;
None.gif    dbms_output.put_line(
' 名字: ' || v_name);
None.gif    EXCEPTION
None.gif    
WHEN  NO_DATA_FOUND  THEN
None.gif    dbms_output.put_line(
' 找不到該名字 ' );
None.gif
end -- <<outer>>
None.gif

None.gif


3)子程序,又可以分成3種:過程、函數和包

A。過程用於執行特定操作,當建立過程時既可以指定輸入參數,也可以指定輸出參數,從而在應用環境和程序間傳遞數據,使用CREATE PROCEDURE語句,如:

None.gif  create   or   replace   PROCEDURE  update_test(id2  NUMBER ,money2  LONG )
None.gif 
is
None.gif    e_no_row EXCEPTION;
None.gif 
begin
None.gif    
update  test  set   money = money2  where  id = id2;
None.gif    
if  SQL % NOTFOUND  THEN
None.gif      RAISE e_no_row;
None.gif    
end   if ;
None.gif EXCEPTION
None.gif    
WHEN   e_no_row  THEN
None.gif      raise_application_error(
- 20004 , ' 該test不存在 ' );
None.gif 
end  update_test;
None.gif
None.gif


B)函數,與過程主要不同是函數需要返回數據,在函數頭和函數體都必須有RETURN語句,如:

 

None.gifcreate   or   replace   FUNCTION  get_long(name2  VARCHAR2 )
None.gif
RETURN   LONG   IS
None.gif  avg_money 
NUMBER ;
None.gif
begin
None.gif  
select   money   into  avg_money  from  test  where  name = name2;
None.gif  
RETURN  avg_money;
None.gif
end ;  

 

C)包,類似JAVA包的概念,包含兩部分,包規範和包體,包規範相當於C++中的頭文件聲明子程序,而包體包含這些子程序的具體實現。調用包中的子程序時,需要 ‘包名.子程序名’ 這樣的形式調用

4。觸發器是指隱含執行的存儲過程,定義觸發器需要指定觸發事件和觸發操作,常見觸發事件如insert,update,delete等,使用CREATE TRIGGER命令建立

文章轉自莊周夢蝶  ,原文發布時間5.17

最後更新:2017-05-17 11:05:16

  上一篇:go  那些年,任天堂發布的遊戲機們
  下一篇:go  C#與java的異同