分爲匿名塊和命名塊(函數、存儲過程、包、觸發器等)。
1.數據類型
數字類型:BINARY_INTEGER(二進制存儲)、NUMBER(十進制)等。
字符類型:CHAR、VARCHAR、VARCHAR2等。
存儲時,變長與定長,比較時,是否會自動縮減空格(也叫做填充比較和非填充比較)。
日期類型:DATE、TIMESTAMP等。
DATE不包含秒的小數部分,TIMESTAMP包含。
布爾類型:BOOLEAN。
True、false、null。
記錄類型:RECORD。
集合類型:TABLE。
等等其他類型。
2.控制結構
①if語句
If 條件 Then 執行語句;
Elsif 條件 then 執行語句;
Else 執行語句 ;
End if;
②case語句
Case 變量
When 值1 then 執行語句;
When 值2 then 執行語句;
。。。
End case;
或者是:
Case
When 條件1 then 執行語句;
When 條件2 then 執行語句;
....
End case;
同corejava中的switch,雖然沒有break語句,但是當滿足一個when的條件而執行其後的操作後,直接結束case語句塊。
3.循環結構
①簡單循環
Loop
...
Exit when 條件;
End loop;
②while循環
While 條件
Loop
....
End loop;
③for循環(普通for循環)
For 變量 in [reverse] 下界..上界
loop
....
End loop;
4.記錄類型、集合類型的定義
記錄類型record和集合類型table
表名persons
id |
name |
age |
1 |
Mimi |
16 |
2 |
Nini |
19 |
3 |
Coco |
18 |
記錄類型即爲表中所放的記錄的類型,集合類型可以看成放有n條記錄的一張表。這裏person是記錄類型,而persons這張表是集合類型。
不能理解的可以從corejava編程中進行聯想:
記錄類型就可看成是一個沒有方法只有屬性的自定義的類。
定義記錄類型:
Type record_type is record{
——————————————————
id number(6) default 100;
Name varchar2(20):= null;
——————————————————
};
而集合類型,顧名思義,將其看成是裝有n個基本類型變量或者是引用類型record_type的實例集合。
定義集合類型:
Type table_name is table of element_type
Index by binary_integer;
4.遊標
可當成 一個帶有指針的臨時性的表,而fetch出來的是以記錄爲單位的。聯想corejava,可以把遊標當成迭代器。
所以不要以爲定義遊標的時候select出來的僅有一個字段(如varchar2類的),fetch出來的類型就是該字段類型的,事實上fetch出來的是一個記錄、包含了select出來字段的一條記錄類型。
①定義遊標
Cursor 名字 is select語句;
②打開遊標
Open 名字;
③檢索遊標
Fetch 名字 into 變量;
④關閉遊標
Close 名字;
5.異常
Declare
聲明異常(自定義異常、非預定義異常)
Begin
(執行體。條件判斷後,執行語句拋出自定義異常,同try)
Exception
When判斷異常(相當於corejava中的catch)
End;
PL/SQL中的異常,三類:
預定義異常、非預定義異常和用戶自定義異常。
非預定義異常:當pl/sql塊執行出現錯誤時,報錯一個錯誤號,爲了捕捉該錯誤,將錯誤號與異常關聯,即成非預定義異常。
異常名 exception;
Pragma exception_init(異常名,錯誤號);
6.存儲過程和函數
存儲過程:
Create [ or replace ] Procedure 名(參數列表)
As|is
聲明部分
Begin
。。。。
[exception] End [名];
函數:
Create [ or replace ] function 名(參數列表)
Return 類型
As|is
聲明部分
Begin
。。。。
[exception] End [名];
參數列表中參數的聲明:
參數名 參數模式 參數類型
Id in | out | in out number
默認時,爲in,參數可爲變量或者常量。
另外兩種,必須爲變量。
存儲過程和函數的區別主要在返回值上。存儲過程並非是沒有返回,可以通過參數返回返回值的,自身不具有返回,即沒有顯示的返回。而函數除了參數列表的參數有返回能力以外,還有一個顯式的返回值,即自身返回值。
7.包
包分爲包規範和包體。包即是將相關的pl/sql元素組織在一起,打包。
包體的實現一定要先定義包規範。
包可以只有規範,而沒有包體。
包規範:
Create or replace package 名字
Is|as
...(元素聲明)
如:Procedure 名字(參數列表);
End [名字];
包體:
Create or replace package body名字
Is|as
...(元素)
End [名字];
原文地址:http://blog.csdn.net/chenhaijing/article/details/5399129