天天看點

Oracle PL/SQL開發入門(第二彈:PL/SQL基本概念)什麼是PL/SQL功能特點語言特性

什麼是PL/SQL

标準的SQL語言提供了定義和操縱資料庫對象的能力,但是并沒有提供程式設計語言所具有的諸多特性。PL/SQL(Procedural Language/SQL)就是為标準SQL語言添加了過程化功能的一門程式設計語言。這讓SQL語句擁有了結構化程式設計的特性,使得開發人員可以直接使用PL/SQL進行複雜業務邏輯的編寫。

功能特點

結構化程式設計

  • 順序結構
  • 分支結構
  • 循環結構

與SQL語言整合

要注意的是,在PL/SQL代碼中隻能直接使用DML語句,如果在PL/SQL代碼中直接使用SQL的DDL語句,Oracle将會提示綁定錯誤,例如這樣就是錯誤的:

BEGIN
    CREATE TABLE BOOKS(ID int NOT NULL,BOOKNAME varchar2() NULL);
END;
           

執行以上代碼會報錯,這是由PL/SQL的早起綁定特性所決定的,在編譯時PL/SQL引擎發現BOOKS表不存在,會引起編譯時錯誤。如果修改為以下寫法,就沒問題了:

DECLARE
  --定義SQL DDL語句
  v_SQLStr VARCHAR(200):=' CREATE TABLE BOOKS(ID int NOT NULL,BOOKNAME varchar2() NULL) ';
BEGIN
  EXECUTE IMMEDIATE v_SQLStr;  --執行DDL語句
END;
           

面向對象開發

PL/SQL可以基于對象類型來定義對象表,或者将對象類型作為Oracle表列進行儲存。

子產品化應用程式開發

PL/SQL提供塊、子程式和包3個程式單元,可以将程式分成多個部分,将複雜的問題劃分開來,做到子產品化。

提高應用程式性能

PL/SQL的塊結構運作一次性向資料庫發送多條SQL語句,可以顯著的提升應用程式的性能。在使用Java、.NET之類語言開發程式時,往往是一次一條SQL語句的方式操作資料庫,這将會産生多次網絡傳輸互動,是的伺服器需要使用較多的資源來處理SQL語句,同時産生了一定的網絡流量。

語言特性

PL/SQL塊結構

塊分為兩種:

- 匿名塊,沒有名稱的PL/SQL塊,這種塊不會儲存在資料庫中

- 命名塊,具有名稱的PL/SQL塊

命名塊又分為三種:

- 使用<<塊名稱>>進行辨別的塊

- 由函數或過程組成的子程式塊,這種塊儲存在資料庫中

- 資料庫觸發器塊

變量和類型

  • 标量變量:指能存放但是數值的變量,這是最常用的變量。标量變量的資料類型包含數字、字元、日期和布爾類型,比如VARCHAR2、CHAR、NUMBER、DATE等類型。
  • 複合變量:指用于存放多個值得變量,比如PL/SQL記錄、PL/SQL表、嵌套表及VARRAY等類型。
  • 參照變量:指用于存放數值指針的變量,比如遊标變量和對象變量。
  • LOB變量:指用于存放大批量資料的變量。

    例如:

DECLARE
  v_DeptName VARCHAR2();        --定義标量變量
  v_LoopCounter BINARY_INTEGER;   --使用PL/SQL類型定義标量變量
  --定義記錄類型
  TYPE t_Employee IS RECORD (EmpName VARCHAR2(),EmpNo NUMBER(),Job VARCHAR2());
  v_Employee t_Employee;          --定義記錄類型變量
  TYPE csor IS REF CURSOR;        --定義遊标變量
  v_date DATE NOT NULL DEFAULT SYSDATE;--定義變量并指定預設值
BEGIN
 NULL;
END;
/
           

程式控制語句

  • 條件控制語句:IF-THEN-ELSE,CASE-WHEN
  • 循環控制語句:LOOP-END簡單循環,數字式FOR循環,WHILE循環

過程、函數與包

過程。函數與包都屬于命名塊,過程和函數統稱為子程式。

觸發器

與包或其他子程式不同的是,觸發器不能被顯式的調用,而是在資料庫時間發生時隐式的運作的,并且觸發器不能接收參數。

結構化異常處理

異常處理塊以EXCEPTION開始。在錯誤發生時,Oracle預定義的異常會被系統隐式的抛出,對于使用者自定義的異常,可以使用RAISE語句手動抛出。當異常被抛出後,異常處理器将捕捉到這些異常,然後執行異常處理代碼。

集合與記錄

集合與記錄都是用複合類型。

集合允許将類型相同的多個變量當做一個整體進行處理,類似于Java或C語言中的數組,可以同時處理單行多列的資料。

記錄允許将多個不同類型的變量當做一個整體進行處理,類似于資料庫中的一條記錄。一個記錄類型可以包含多個簡單類型的值或複雜類型的值。

遊标

遊标是一個指向上下文區域的指針,這個上下文區域是PL/SQL語句塊在執行SELECT語句或DML資料操縱語句時配置設定的 。遊标分為兩種:

- 隐式遊标:由PL/SQL自動為DML語句或SELECT-INTO語句配置設定的遊标,包括隻傳回一條記錄的查詢操作。

- 顯式遊标:在PL/SQL塊的聲明區域中顯示定義的,用來處理傳回多行記錄查詢的遊标。

動态SQL

PL/SQL是使用早期綁定來執行SQL語句的,早期綁定要求所處理的資料庫對象必須存在并且是已知的。

動态SQL是指在運作時由字元串拼合而成的SQL,比如在PL/SQL塊中不能執行DDL語句和DCL語句,那麼可以使用EXECUTE IMMEDIATE來執行動态拼合而成的SQL語句。