標籤:oracle pl/sql 塊結構
一、什麼是PL/SQL
PL/SQL是對SQL語言的擴充。
SQL語言是一種非過程性語言,即使用者只需要告訴電腦做什麼,而不需要理解電腦是怎麼做的。比如使用者要查詢一張表裡的某一列資料,只需要輸入:selectCOLUNM_NAME from TABLE_NAME where CONDITION;就可以了,而不需要瞭解電腦是如何查詢的。這既是優點也是缺點,優點就是該語言非常容易學習,缺點則是缺乏過程式控制制,限制了其功能,比如無法進行if...else的條件判斷,也無法進行for迴圈操作。
基於SQL語言的局限性,於是誕生了PL/SQL。PL/SQL語言提供了條件判斷、迴圈等等普通程式語言具備的功能。SQL語言是一種標準語言,如Oracle、MySQL、SQL_Server等等都支援,而PL/SQL則是Oracle公司專有的,它將過程式控制制和SQL語言無縫結合在一起,從而加強了SQL語言的功能。
二、PL/SQL的功能
PL/SQL的功能主要有:
1. PL/SQL提供了塊結構,從而實現了模組化設計。任何一種程式語言都提供了函數、過程等基本結構,而函數過程都是將一個大的程式模組化,使得程式更容易開發和維護,PL/SQL也不例外。
2. PL/SQL提供了一些過程化的結構:
A. 變數(Variables)、常量(Constants)以及多種資料類型;
B. 提供了條件分支判斷和迴圈結構;
C. 提供了一次編譯,多次啟動並執行單元。
三、PL/SQL的執行機制
PL/SQL語句在執行時,會分成兩個部分,SQL語言部分由Oracle資料庫核心中的SQL引擎來執行;PL/SQL的塊則會由PL/SQL引擎來執行。
SQL引擎始終是位於Oracle資料庫裡面的,PL/SQL引擎則可以位於Oracle資料庫內部,也可以獨立於Oracle資料庫而存在。獨立於Oracle資料庫存在的PL/SQL引擎多為一些資料庫開發工具所提供,在用戶端執行,而不是在服務端執行。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/45/41/wKiom1PlNwmA_a-zAAEU6Rsr06Y709.jpg" title="1.png" alt="wKiom1PlNwmA_a-zAAEU6Rsr06Y709.jpg" />
四、PL/SQL的優點
PL/SQL的優點主要有:
1. 在SQL語言中整合了一些過程式控制制;
2. 提高了效能,
如果單純的使用SQL語言,那麼每執行一條SQL語句,就需要將結果返回到用戶端,由用戶端根據傳回值進行分支控制,然後再執行下一條SQL語句,這個過程會產生大量的I/O操作。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/45/41/wKiom1PlNxqiqEUsAABUHBrtvoY492.jpg" title="2.png" alt="wKiom1PlNxqiqEUsAABUHBrtvoY492.jpg" />
與之對應的,使用PL/SQL語言,可以由用戶端將要查詢的業務代碼打包成一個整體,一次性發給Oracle資料庫,甚至很多商務邏輯語句已經整合在Oracle資料庫的核心裡面了,用戶端只需要調用一下即可。資料庫會在服務端完成所有的操作,再一次性將結果返回給用戶端,從而減少了網路資料的傳輸。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/45/42/wKioL1PlOEHgrjRbAAB0Jide8rE410.jpg" title="3.png" alt="wKioL1PlOEHgrjRbAAB0Jide8rE410.jpg" />
3.支援模組化編程;
4. Oracle的很多開發工具都支援PL/SQL語言的開發;
5. 可移植性(主要是在Oracle資料庫之間進行移植,跨資料庫,如MySQL和Oracle之間的移植會比較困難)
6. 支援異常處理。
五、PL/SQL的塊結構
PL/SQL語言的基本單元就是塊,塊主要分為以下四個部分:
DECLARE(optional) ——聲明部分
該部分主要定義以下內容:變數(Variables),常量(Constant),指標(cursor),使用者自訂的異常(User-definedexceptions)等等。
BEGIN(mandatory)——商務邏輯部分
該部分主要存放商務邏輯:
SQL語句
PL/SQL語句
EXCEPTION(optional)——異常處理部分
該部分主要進行異常的處理
END;(mandatory)——結束部分
注意,BEGIN 和 END這兩個部分是必須的,而DECLARE和EXCEPTION這兩個部分是可選的,且只在END最後有個分號,其他的地方都沒有。
六、塊的種類
PL/SQL的塊主要有以下三種:
A. 匿名塊(Anonymous)
匿名塊是指沒有起名的塊,它不是儲存在Oracle資料庫裡的,它一旦被執行過就失效了,不能重複使用;它主要用於寫一些測試和臨時使用的語句,其結構如下:
[DECLARE]
BEGIN
--statements
[EXCEPTION]
END;
B. 過程塊(Procedure)
過程塊需要起名字,其中PROCEDURE部分相當於匿名塊中的DECLARE部分。有名字的塊(Procedure和Function)可以儲存在資料庫中反覆調用,用在比較正式的環境下,其結構如下:
PROCEDURE name
IS
BEGIN
--statements
[EXCEPTION]
END;
C. 函數塊(Function)
函數塊也有名字,它和過程塊的區別在於它一定要返回資料,其結構如下:
FUNCTION name
RETURN datatype
IS
BEGIN
--statements
RETURN value;
[EXCEPTION]
END;
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/45/42/wKioL1PlOFuAw5AzAAEQSpSY9TY394.jpg" title="4.png" alt="wKioL1PlOFuAw5AzAAEQSpSY9TY394.jpg" />
七、PL/SQL的程式構建
PL/SQL的程式可以構建在用戶端,也可以構建在服務端,構建在服務端的情況更常見,因為如果構建在用戶端,還需要使用Oracle提供的額外開發工具。
在用戶端構建的PL/SQL程式主要內容有:匿名塊、過程、函數、包(包是函數和過程的整合)、觸發器和一些其他類型的元素;
在服務端構建的PL/SQL程式主要內容有:匿名塊、預存程序和函數、包、觸發器和一些其他類型的元素。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/45/41/wKiom1PlN16h46JtAAHM8LgwBJg479.jpg" title="5.png" alt="wKiom1PlN16h46JtAAHM8LgwBJg479.jpg" />
本文出自 “重劍無鋒 大巧不工” 部落格,請務必保留此出處http://wuyelan.blog.51cto.com/6118147/1537687