標籤:
顯式遊標使用主要有四個步驟:
聲明/定義遊標
開啟遊標
讀取資料
關閉遊標
CASE 條件運算式
WHEN 條件運算式結果1 THEN
語句1
WHEN 條件運算式結果2 THEN
語句2
......
WHEN 條件運算式結果n THEN
語句n
[ELSE 條件運算式結果]
END;
包(PACKAGE)是一種資料對象,它是一組相關過程、函數、變數、常量和遊標等PL/SQL程式設計項目的組合,作為一個完整的單中繼存放區在資料庫中,用名稱來標識。
包的優點
- 模組化:使用包,可以封裝相關的類型、對象和子程式。把一個大的功能模組劃分成多個小的功能模組,分別完成各自的功能,這樣組織的程式易於編寫,理解和管理。
- 更輕鬆的應用程式設計:包規範部分和包體部分可以分別建立並編譯。換言之,我們可以在沒有編寫包體的情況下編寫包規範的代碼並進行編譯。
- 資訊隱藏:包中的元素可以分為公有元素和私人元素,公有元素可被程式包內的過程、函數等訪問,還可以被包外的PL/SQL訪問。但對於私人元素只能被包內的過程、函數等訪問。對於使用者,只需知道包規範,不用瞭解包體的具體細節。
- 效能更佳:應用程式第一次調用程式包中的某個元素時,就將整個程式包載入到記憶體中,當第二次訪問程式包中的元素時,ORACLE將直接從內在中讀取,而不需要進行磁碟I/O操作而影響速度,同時位於記憶體中的程式包可被同一會話期間的其它應用程式共用。因此,程式包增加了重用性並改善了多使用者、多應用程式環境的效率。
3. 包的定義
PL/SQL中的包由包規範和包體兩部分組成。建立包時,首先要建立包規範,然後再建立對包規範的實現–包體。
item_list_1:聲明包的公用群組件列表
{ type_definition -- 資料類型
| cursor_declaration -- 遊標
| item_declaration -- 變數、常量等
| function_declaration -- 函數
| procedure_declaration -- 過程
}
1. 預存程序概念
預存程序(Stored Procedure)是在大型資料庫系統中,一組為了完成特定功能的SQL語句集,儲存在資料庫中。經過第一次編譯後再次調用不需要再次編譯,使用者通過指定預存程序的名字並給出參數(如果該預存程序帶有參數)來執行它。
2. 事務特性
SQL92標準定義了資料庫事務的四個特點:
- 原子性(Atomicity):一個事務裡面所有包含的SQL語句是一個執行整體,不可分割,要麼都做,要麼都不做。
- 一致性(Consistency):事務開始時,資料庫中的資料是一致的,事務結束時,資料庫的資料也應該是一致的。
- 隔離性(Isolation):是指資料庫允許多個並發事務同時對其中的資料進行讀寫和修改的能力,隔離性可以防止事務的並發執行時,由於他們的操作命令交叉執行而導致的資料不一致狀態。
- 持久性 (Durability) : 是指當事務結束後,它對資料庫中的影響是永久的,即便系統遇到故障的情況下,資料也不會丟失。
一組SQL語句操作要成為事務,資料庫管理系統必須保證這組操作的原子性(Atomicity)、一致性(consistency)、隔離性(Isolation)和持久性(Durability),這就是ACID特性。
3. 資料異常
3.1 髒讀
3.2 不可重複讀取
3.3 幻讀
4. 交易隔離等級
針對讀取資料時可能產生的不一致現象,在SQL92標準中定義了4個事務的隔離等級:
隔離等級 |
髒讀 |
不可重複讀取 |
幻讀 |
Read uncommitted(讀未提交) |
是 |
是 |
是 |
Read committed(讀已提交) |
否 |
是 |
是 |
Repeatable read(可重複讀) |
否 |
否 |
是 |
Serializable(串列讀) |
否 |
否 |
否 |
5. 事務控制命令
5.1 提交事務
在執行使用COMMIT語句可以提交事務,當執行了COMMIT語句後,會確認事務的變化,結束事務,刪除儲存點,釋放鎖。當使用COMMIT語句結束事務之後,其他會話將可以查看到事務變化後的新資料。
5.2 復原事務
儲存點(savepoint):是事務中的一點,用於取消部分事務,當結束事務時,會自動的刪除該事務所定義的所有儲存點。當執行ROLLBACK時,通過指定儲存點可以回退到指定的點。
6. 資料庫鎖
6.1 鎖分類
6.2 共用鎖定(S鎖)
6.3 獨佔鎖定(X鎖)
6.4 行級共用鎖定(RS鎖)
6.5 行級獨佔鎖定(RX鎖)
6.6 共用行級獨佔鎖定(SRX鎖)
Oracle資料庫(3-7)