從PL/SQL的字面上來看,它和SQL有一定的關係,那麼就從SQL開始講一下它們倆兄弟之間的關係。
什麼是SQL?
結構化查詢語言(Structured Query Language,簡稱SQL)是用來訪問關係型資料庫一種通用語言,屬於第四代語言(4GL),其執行特點是非過程化,即不用指明執行的具體方法和途徑,而是簡單地調用相應語句來直接取得結果即可。顯然,這種不關注任何實現細節的語言對於開發者來說有著極大的便利。
那什麼又是PL/SQL呢?
對於有些複雜的業務流程要求相應的程序來描述,這種情況下SQL就有些無能為力了。PL/SQL的出現正是為了解決這一問題,PL/SQL是一種過程化語言,屬於第三代語言,它與C、 C++、Java等語言一樣關注於處理細節,可以用來實現比較複雜的業務邏輯。
PL/SQL(Procedural Language/SQL)是資料庫廠商在標準的SQL語言上的擴展。PL/SQL不僅允許嵌入SQL語言,還可以定義變量和常量,允許使用條件語句和循環語句,允許使用例外處理各種錯誤,這使得它的功能變得更加強大。
我們需要知道的
我們需要了解以下幾個關鍵點:
存儲過程,函數,觸發器是PL/SQL編寫的
存儲過程,函數,觸發器是存儲在資料庫中的
PL/SQL是非常強大的資料庫過程語言
存儲過程,函數可以在C、 C++、Java、C#等程序中調用
PL/SQL開發工具有哪些?
首先,資料庫廠商都會自帶命令行開發工具,比如Oracle的SQL*PLUS、MySQL的MySQL Client、DB2的DB2CMD等等。
其次,會有一些集成開發環境(IDE),比較知名的有PL/SQL Developer(這個只適用Oracle資料庫)、DbVisualizer、Navicat、SQLyog、Toad等等,這些IDE都是獨立的第三方產品。其實,各資料庫廠商也有自己的IDE,不過感覺沒有特別好用的,基本上被第三方軟體壟斷,畢竟IDE不是資料庫公司的強項嘛。
我們上面說的命令行工具以及集成開發環境都可以用來編寫SQL或者PL/SQL程序,都屬於PL/SQL的開發工具。
PL/SQL的程序結構
我們來大概瀏覽一下PL/SQL的程序結構,各資料庫廠商的實現,會有所不同,下面以Oracle為例進行說明。
PL/SQL程序都是以塊(block)為基本單位,整個PL/SQL塊分三部分:聲明部分(用declare開頭)、執行部分(以 begin開頭)和異常處理部分(以exception開頭)。其中執行部分是必須的,其他兩個部分可選。無論PL/SQL程序段的代碼量有多大,其基本結構就是由這三部分組成。
程序結構模板
declare
/* 聲明區(可選):定義類型和變量、聲明變量、聲明函數、遊標 */
begin
/* 執行區(必須的):執行pl/sql語句或者sql語句 */
exception
/* 異常處理區(可選):處理錯誤的 */
end;
一個demo
/*聲明部分,以declare開頭*/
declare v_id integer;
v_name varchar(20);
cursor c_emp is select * from employee where emp_id=3;
/*執行部分,以begin開頭*/
begin open c_emp; //打開遊標
loop
//從遊標取數據
fetch c_emp into v_id,v_name;
exit when c_emp%notfound ;
end loop ;
//關閉遊標
close c_emp;
dbms_output.put_line(v_name);
/*異常處理部分,以exception開始*/
exception
when no_data_found then
dbms_output.put_line('沒有數據');
end ;
還是沒感覺?去動手做個小慄子吧
更多關於PL/SQL的用法可以點擊左下角的「閱讀原文」查看,在置頂貼中羅列了Oracle、DB2、MSSQL、MySQL、PGSQL這些常用5種資料庫的存儲過程、函數、觸發器的基本用法,可以作為每種資料庫的PL/SQL程序模版來用,在此基礎上開發複雜的PL/SQL程序。