PLSQL Language Reference-PL/SQL概覽-PL/SQL的主要功能

LuiseDalian發表於2014-03-06

PL/SQL的主要功能

PL/SQL結合了SQL的資料操作能力和過程語言的處理能力。

當可以使用SQL解決問題時,可以從PL/SQL程式執行SQL語句,而不用學習新的API

像其它的過程處理語言一樣,PL/SQL允許宣告常量、變數、控制程式流向、定義子程式、捕獲執行時錯誤。

可以將複雜的問題拆分成小的容易解決的子程式,可以在多個應用程式中複用。

錯誤處理

PL/SQL使得檢測和處理錯誤非常容易。當錯誤發生時,PL/SQL產生一個異常。正常的執行停止,控制轉向PL/SQL塊的異常處理部分。你不需要每個操作來確保它成功,就像在C程式中一樣。

PL/SQL原始碼的基本單位是塊。它把相關的宣告和語句組織到一起。

一個PL/SQL塊由下面的關鍵字來定義:

declare

begin

exception

end;

一個PL/SQL3部分組成:宣告部分,執行部分,異常處理部分。只有執行部分是必須的。

塊中還可以包括標籤。

<< label >> (可選的)

declare                                                     --宣告部分(可選)

    -- 本地變數、型別和子程式的宣告

begin                                                       -- 執行部分(必須的)

    -- 語句 (可以使用宣告部分的成員)

exception                                                   -- 異常處理部分(可選)

    -- 對於執行部分產生的異常進行處理

end;

宣告部分對於塊是本地可見的,塊執行結束後就消失了,用於幫助避免變數和子程式的雜亂的名稱空間。

塊可以巢狀。因為塊是一個可執行的宣告,所以它可以出現在其它塊中可執行語句出現的地方。

可以把塊提交給互動式工具(如SQL*PlusEnterprise Manager)或把它嵌入到Oracle預編譯程式或OCI程式中。然後互動式工具或程式執行塊一次。塊不被儲存到資料庫中,因此這種塊被稱為匿名塊(即使它有標籤)。注意:一個匿名塊是一個SQL語句。

匿名塊每次都被編譯並被載入到記憶體,它的編譯過程有3個階段:

n  語法檢查:PL/SQL語法被檢查,解析樹被生成。

n  語義檢查:型別檢查並進一步處理解析樹。

n  生成程式碼。

變數和常量

可以定義常量和變數。在程式執行時變數的值可以改變,而常量不可以。

子程式

PL/SQL子程式是一個可以被重複呼叫的命名塊。如果子程式有引數,每次呼叫時引數可以不同。

PL/SQL2種型別的子程式:過程和函式。函式有返回值。

PL/SQL也可以呼叫使用其它語言書寫的外部程式。

包是一個方案物件,用於在邏輯上組織相關的型別、變數、常量、子程式、游標和異常。包被編譯並儲存在資料庫中,多個應用程式可以共享它的內容。可以把包看作是一個應用程式。

可以書寫自己的包,也可以使用Oracle提供的許多特定包。

觸發器

觸發器是命名的PL/SQL單元,儲存在資料庫中,並在資料庫事件發生時做為響應而執行。

可以指定事件、在事件之前還是之後觸發、是每事件執行一次還是每行執行一次。

輸入輸出

大多數的PL/SQL輸入、輸出都是通過SQL語句來完成,這些SQL語句在資料庫表中儲存資料或查詢這些表。


 

所有其它的PL/SQL I/O都是通過下面的包來完成的。

dbms_output

PL/SQL塊、包、子程式、觸發器輸出。尤其是輸出PL/SQL除錯資訊。

htf

超文字函式,產生HTML標籤(例,htf.anchor產生標籤)

htp

超文字過程,產生HTML標籤

dbms_pipe

允許相同例項中的2個或多個會話進行通訊

utl_file

讀寫作業系統檔案

utl_http

進行HTTP協議呼叫,和通過HTTP協議訪問internet上的資料。

utl_smtp

通過RFC821描述的SMTP協議傳送電子郵件

如果想顯示傳遞給dbms_output的輸出,需要其它的程式,例如SQL*Plus,需要設定SQL*Plus引數set serveroutput on

上表包中的這些子程式可以接受輸入和顯示輸出,但他們不能從鍵盤直接接受資料。

為了從鍵盤直接接受資料,需要使用SQL*Plus中的promptaccept命令。

資料抽象

使用資料抽象可以讓你工作於資料的主要屬性,而不必捲入到細節之中。可以先定義資料結構,然後設計演算法來操作它。

1)游標

游標是指向私有SQL區的一個指標,SQL區域儲存關於處理特定的SQL語句或PL/SQLselect into語句的資訊。可以使用游標一次取得結果集中的行。可以使用游標屬性獲得游標的狀態,例,SQL語句影響了多少行。

2)複合變數

複合變數擁有內部成員,可以單獨訪問。可以把複合變數作為引數整體傳遞給子程式。PL/SQL2種型別的複合變數:集合記錄。在集合中,所有的內部成員都是相同型別被稱作元素。可以通過唯一的下標來訪問每個元素。連結串列和陣列是典型的集合;在記錄中,內部成員可以有不同的型別,被稱作。通過名稱訪問每個域。一個記錄變數可以用來儲存表中的一行,表一行中的部分列。

3%rowtype屬性

可以用來宣告一個記錄來表示表或檢視一行或行的一部分。對於一行或一行的一部分的每個列,記錄都有一個具有相同名稱和型別的域。如果行的結構改變了,則記錄的結構會相應的改變。

4%type屬性

可以用來宣告與先前宣告的變數或列具有相同資料型別的資料元素,而不需要知道具體是什麼型別。如果被引用的成員改變了,則宣告的成員隨之改變。該屬性在宣告變數儲存資料庫值的時候非常有用。

5)抽象資料型別

抽象資料型別包含資料結構和處理資料的子程式。構成資料結構的變數稱為屬性。操作屬性的子程式稱為方法

ADT被儲存在資料庫中,ADT的例項可以被儲存在表中,作為PL/SQL變數來使用。

ADT可以通過將大的系統分割成可重用小的邏輯元件來降低複雜性。

在資料字典檢視*_OBJECTSobject_type的值為type;在資料字典檢視*_TYPESTYPECODE的值是object

控制語句

控制語句是PL/SQLSQL最重要的擴充套件。

n  條件選擇語句:根據不同的資料值執行不同的語句

n  迴圈語句:為一系列不同的值重複執行相同的語句

n  順序控制語句:允許跳轉到特定的標籤語句,或什麼都不做。

條件編譯

條件編譯允許在PL/SQL應用中自定義功能而不用移除原始碼:

n  可以使用新版本中的新功能,而在老版本的資料庫中執行應用時禁用。

n  在開發環境中啟用除錯和跟蹤語句,當在生產性站點執行程式時隱藏他們。

一次一行處理查詢結果集

PL/SQL允許執行一個SQL查詢,並一次處理結果集中的一行。

begin

    for someone in (select * from employees where employee_id < 120 order by employee_id)

    loop

        dbms_output.put_line('First name = ' || someone.first_name ||

                            ', Last name = ' || someone.last_name);

    end loop;

end;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1102563/,如需轉載,請註明出處,否則將追究法律責任。

相關文章