PLSQL Language Reference-PL/SQL概覽-PL/SQL的主要功能
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/SQL由3部分組成:宣告部分,執行部分,異常處理部分。只有執行部分是必須的。
塊中還可以包括標籤。
<< label >> (可選的) declare --宣告部分(可選) -- 本地變數、型別和子程式的宣告 begin -- 執行部分(必須的) -- 語句 (可以使用宣告部分的成員) exception -- 異常處理部分(可選) -- 對於執行部分產生的異常進行處理 end; |
宣告部分對於塊是本地可見的,塊執行結束後就消失了,用於幫助避免變數和子程式的雜亂的名稱空間。
塊可以巢狀。因為塊是一個可執行的宣告,所以它可以出現在其它塊中可執行語句出現的地方。
可以把塊提交給互動式工具(如SQL*Plus或Enterprise Manager)或把它嵌入到Oracle預編譯程式或OCI程式中。然後互動式工具或程式執行塊一次。塊不被儲存到資料庫中,因此這種塊被稱為匿名塊(即使它有標籤)。注意:一個匿名塊是一個SQL語句。
匿名塊每次都被編譯並被載入到記憶體,它的編譯過程有3個階段:
n 語法檢查:PL/SQL語法被檢查,解析樹被生成。
n 語義檢查:型別檢查並進一步處理解析樹。
n 生成程式碼。
變數和常量
可以定義常量和變數。在程式執行時變數的值可以改變,而常量不可以。
子程式
PL/SQL子程式是一個可以被重複呼叫的命名塊。如果子程式有引數,每次呼叫時引數可以不同。
PL/SQL有2種型別的子程式:過程和函式。函式有返回值。
PL/SQL也可以呼叫使用其它語言書寫的外部程式。
包
包是一個方案物件,用於在邏輯上組織相關的型別、變數、常量、子程式、游標和異常。包被編譯並儲存在資料庫中,多個應用程式可以共享它的內容。可以把包看作是一個應用程式。
可以書寫自己的包,也可以使用Oracle提供的許多特定包。
觸發器
觸發器是命名的PL/SQL單元,儲存在資料庫中,並在資料庫事件發生時做為響應而執行。
可以指定事件、在事件之前還是之後觸發、是每事件執行一次還是每行執行一次。
輸入輸出
大多數的PL/SQL輸入、輸出都是通過SQL語句來完成,這些SQL語句在資料庫表中儲存資料或查詢這些表。
所有其它的PL/SQL I/O都是通過下面的包來完成的。
dbms_output |
讓PL/SQL塊、包、子程式、觸發器輸出。尤其是輸出PL/SQL除錯資訊。 |
htf |
|
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中的prompt和accept命令。
資料抽象
使用資料抽象可以讓你工作於資料的主要屬性,而不必捲入到細節之中。可以先定義資料結構,然後設計演算法來操作它。
(1)游標
游標是指向私有SQL區的一個指標,SQL區域儲存關於處理特定的SQL語句或PL/SQL的select into語句的資訊。可以使用游標一次取得結果集中的行。可以使用游標屬性獲得游標的狀態,例,SQL語句影響了多少行。
(2)複合變數
複合變數擁有內部成員,可以單獨訪問。可以把複合變數作為引數整體傳遞給子程式。PL/SQL有2種型別的複合變數:集合和記錄。在集合中,所有的內部成員都是相同型別被稱作元素。可以通過唯一的下標來訪問每個元素。連結串列和陣列是典型的集合;在記錄中,內部成員可以有不同的型別,被稱作域。通過名稱訪問每個域。一個記錄變數可以用來儲存表中的一行,表一行中的部分列。
(3)%rowtype屬性
可以用來宣告一個記錄來表示表或檢視一行或行的一部分。對於一行或一行的一部分的每個列,記錄都有一個具有相同名稱和型別的域。如果行的結構改變了,則記錄的結構會相應的改變。
(4)%type屬性
可以用來宣告與先前宣告的變數或列具有相同資料型別的資料元素,而不需要知道具體是什麼型別。如果被引用的成員改變了,則宣告的成員隨之改變。該屬性在宣告變數儲存資料庫值的時候非常有用。
(5)抽象資料型別
抽象資料型別包含資料結構和處理資料的子程式。構成資料結構的變數稱為屬性。操作屬性的子程式稱為方法。
ADT被儲存在資料庫中,ADT的例項可以被儲存在表中,作為PL/SQL變數來使用。
ADT可以通過將大的系統分割成可重用小的邏輯元件來降低複雜性。
在資料字典檢視*_OBJECTS中object_type的值為type;在資料字典檢視*_TYPES中TYPECODE的值是object。
控制語句
控制語句是PL/SQL對SQL最重要的擴充套件。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PLSQL Language Reference-PL/SQL概覽-PL/SQL架構SQL架構
- PLSQL Language Reference-PL/SQL概覽-PL/SQL的優點SQL
- PLSQL Language Reference-PL/SQL概覽-PL/SQL語言基礎SQL
- PLSQL Language Reference-PL/SQL子程式-PL/SQL函式結果快取(二)SQL函式快取
- PLSQL Language Reference-PL/SQL子程式-過載子程式SQL
- PLSQL Language Reference-PL/SQL語言基礎-表示式-PL/SQL表示式中的SQL函式SQL函式
- PLSQL Language Reference-PL/SQL新功能-版本11.1 新功能SQL
- PLSQL Language Reference-PL/SQL新功能-版本11.2.0.1新功能SQL
- PLSQL Language Reference-PL/SQL新功能-版本11.2.0.2新功能SQL
- PLSQL Language Reference-PL/SQL語言基礎-詞彙單元-宣告SQL
- PLSQL Language Reference-PL/SQL子程式-子程式的副作用(side effects)SQLIDE
- PLSQL Language Reference-PL/SQL語言基礎-表示式-BOOLEAN表示式SQLBoolean
- PLSQL Language Reference-PL/SQL語言基礎-表示式-短路計算SQL
- PLSQL Language Reference-PL/SQL語言基礎-詞彙單元-字面量SQL
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-不同的最值大小SQL資料型別
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-使用者定義的PL/SQL子型別SQL資料型別
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-有限制的子型別SQL資料型別
- PLSQL Language Reference-PL/SQL語言基礎-表示式-比較操作符SQL
- PLSQL Language Reference-PL/SQL語言基礎-表示式-邏輯操作符SQL
- PLSQL Language Reference-PL/SQL語言基礎-表示式-連線操作符SQL
- PLSQL Language Reference-PL/SQL子程式-PL/SQL函式結果快取-開啟函式結果快取SQL函式快取
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-LONG和LONG RAW變數SQL資料型別變數
- PLSQL Language Reference-PL/SQL語言基礎-詞彙單元-識別符號引用SQL符號
- PLSQL Language Reference-PL/SQL子程式-過載子程式-子程式過載錯誤SQL
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-ROWID和UROWID變數SQL資料型別變數
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-CHAR和VARCHAR2變數SQL資料型別變數
- PLSQL Language Reference-PL/SQL子程式-過載子程式-不可以過載的子程式SQL
- PLSQL Language Reference-PL/SQL語言基礎-表示式-操作符優先順序SQL
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-使用SELECT INTO賦值SQL變數賦值
- PLSQL Language Reference-PL/SQL子程式-子程式引數-子程式引數傳遞方法SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-靜態SQL的描述-偽列SQL
- PLSQL Language Referenc-PL/SQL靜態SQL-靜態SQL的描述-語句SQL
- PLSQL Language Reference-PL/SQL語言基礎-條件編譯-條件編譯指令限制SQL編譯
- PLSQL Language Reference-PL/SQL語言基礎-條件編譯-條件編譯舉例SQL編譯
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-對BOOLEAN變數賦值SQL變數賦值Boolean
- PLSQL Language Reference-PL/SQL語言基礎-詞彙單元-分隔符、識別符號SQL符號
- PLSQL Language Referenc-PL/SQL動態SQL-何時需要動態SQLSQL
- PLSQL Language Referenc-PL/SQL靜態SQL-自治事務(二)SQL