PL/SQL經典學習筆記(6-10)

LuiseDalian發表於2013-01-13

不是重新計算。

11.1之前,如果想讓PL/SQL程式快取函式的結果,必須對快取和快取管理子程式進行設計和編碼。如果多個會話執行你的應用,每個會話必須有它自己的快取和快取管理子程式的拷貝。有時每個會話必須執行相同的代價高昂的計算。

11.1中,PL/SQL提供了函式結果快取。為了使用函式結果快取,可以在每個想快取結果的PL/SQL函式中使用result_cache子句。因為函式結果快取存在於SGA中,執行你應用的任何會話都可以訪問。

在將你的應用轉化為PL/SQL函式結果快取之後,它會使用更多的SGA,但是會使用相當少的整個系統記憶體。

 

複合DML觸發器

建立在表上或editioning檢視上的複合DML觸發器可以在多個時間點被觸發。每個時間點部分都有自己的執部分和可選的異常處理部分,所有的這些部分都可以訪問常規的PL/SQL state。常規state開始於觸發語句開始,消失於觸發語句結束,甚至是當觸發語句產生錯誤時。

11.1之前,開發者使用從屬包來模組化常規狀態。這種方法當觸發語句出現錯誤和語句後觸發器沒有觸發時,對應用程式是難處理的,也可能導致記憶體洩露。當你實現的行為需要在多個時間點共享資料時,複合觸發器提供了輔助的方法。

 

對觸發器的更多控制

create trigger語句現在支援enable, disable, follows子句,可以對觸發器有更多的控制。

disable允許建立一個disable狀態的觸發器,這樣可以在enable一個觸發器之前確保觸發器程式碼成功編譯。

enable顯示地指定的預設的觸發器狀態。

follows可以控制建立在相同表上或擁有相同時間點的觸發器的觸發順序。

 

自動子程式內聯

子程式內聯會將子程式呼叫替換為被呼叫的子程式的拷貝,這可以提高程式的效能。

可以使用PRAGMA INLINE指定單獨的子程式的呼叫是否內聯;也可以設定PLSQL_OPTIMIZE_LEVEL = 3,預設值為2來開啟自動內聯,讓編譯器來尋找內聯機會。

當自動內聯不會提升應用程式效能的情況下(很少),可以使用PL/SQL層次分析器來識別想關掉內聯的子程式。

 

PL/Scope

它是一個編譯器驅動的工具,可以用來收集和組織PL/SQL原始碼中使用者定義的識別符號的資料。因為它是一個編譯器驅動的工具,所以需要在互動式的環境(如SQL DeveloperJDeveloper)中使用它,而不是直接使用。

 

PL/SQL層次剖析器

它報告你的PL/SQL程式的動態執行綱要,通過子程式呼叫來組織。它分別計數SQLPL/SQL的執行次數。在動態執行綱要的每個子程式層次的概覽中包括子程式的呼叫次數、子程式自己執行的時間、子程式分支樹上花費的時間、詳細的父子關係等資訊。

可以在瀏覽器中檢視生成的HTML報告。瀏覽器的導航能力和優選出來的連結提供了有效的方法來分析大應用程式,提高應用程式的效能,降低開發成本。

 

PL/SQL本地編譯器直接產生原生程式碼

PL/SQL本地編譯器直接產生原生程式碼,而不是將PL/SQL程式碼轉換成C程式碼,再由C編譯器產生原生程式碼。一個個人開發者可以編譯PL/SQL單元進行本地執行,而不需要在DBA部分進行安裝。本地編譯的PL/SQL程式的執行速度提升了,有些情況下成數量級提升。

1.1 PL/SQL概覽

PL/SQLSQL的過程化擴充套件,是一種便攜的、高效能的過程處理語言。

1.1.1 PL/SQL的優點

1.1.1.1  SQL的緊密整合

允許使用所有的SQL資料操作、游標控制、事務控制語句;

所有的SQL函式、操作符和偽列。

支援所有SQL資料型別。不需要在PL/SQL資料型別和SQL資料型別之間進轉換;

可以給PL/SQL資料成員賦與表的列或行的型別,而不需要顯式地指定該種資料型別。

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

PL/SQL支援靜態SQL,也支援動態SQL

靜態SQL:在編譯時所有文字是確定的。

動態SQL:直到執行時,它的全部文字才能確定。動態SQL可以使應用程式更加靈活和通用。

1.1.1.2 高效能

PL/SQL是將一個語句塊傳送給資料庫,可以顯著地降低應用程式和資料庫之間的通訊量。

1)繫結變數

當在PL/SQL程式碼中嵌入insert, update, deleteselect這些SQL語句時,PL/SQL編譯器會將wherevalues子句中的變數轉化為繫結變數。每當相同的程式碼執行時,Oracle可以重用這些SQL語句,這樣可以提高效能。

當使用動態SQL時,PL/SQL不會自動建立繫結變數,但可以通過顯式指定來在動態SQL中使用繫結變數。

2)子程式

PL/SQL子程式是以可執行的形式被儲存的,可以被重複地呼叫。因為儲存子程式是在資料庫伺服器上執行的,一個通過網路的單獨的呼叫可能會開始一個很大的工作。任務的分開可以降低網路通訊量和提高響應時間。儲存子程式是被快取的且在使用者之間共享,這可以降低記憶體需要和呼叫開銷。

3)優化器

PL/SQL編譯器有個優化器,可以重新組織程式碼取得更好的效能。

1.1.1.3 高生產力

PL/SQL可以為運算元據寫出緊湊的程式碼。就像PERL一樣的指令碼語言一樣,可以在檔案中讀、轉化和寫資料;PL/SQL可以查詢、轉化和更新資料庫中的資料。

PL/SQL有許多功能可節省設計和除錯的時間,並且它在所有的環境中都是一致的。可以在一個Oracle工具中學習使用PL/SQL,然後可以將知識轉移到其它工具上。例,可以在SQL Developer中建立PL/SQL塊,然後在Oracle窗體觸發器中使用它。

1.1.1.4 可移植性

可以在任何執行Oracle資料庫的作業系統和平臺上執行PL/SQL程式。

1.1.1.5 可擴充套件性

PL/SQL儲存子程式通過在資料庫伺服器上集中應用程式處理來提高可擴充套件性。共享伺服器的共享記憶體設施允許Oracle資料庫支援一個節點上的數以千計的併發使用者。

對於更進一步的可擴充套件性,你可以使用Oracle連線管理器來多路傳輸網路連線。

1.1.1.6 易處理性

因為可以在資料庫伺服器上維護子程式的一個拷貝,而不是每個客戶端一個拷貝。任何數量的應用程式都可以使用這個子程式,可以在不影響呼叫它的應用程式的情況下修改子程式。

1.1.1.7 支援物件導向程式設計

使用抽象資料型別(ADT)來支援物件導向程式設計。

1.1.1.8 支援Web應用開發

PL/SQL可以建立直接從資料庫產生Web頁面的應用程式。可以通過Web來訪問資料庫,可以通過內部網訪問內部資料。

PL/SQL Web應用程式程式設計流程類似於CGI PERL指令碼。開發者通常使用CGI指令碼來動態產生Web頁面,但這樣的指令碼通常不是訪問資料的最佳選擇。使用PL/SQL儲存子程式來傳遞Web內容提供了資料庫訪問的能力和靈活性。例,可以使用DML語句、動態SQL和游標。這樣也可以避免對每個HTTP請求生成新的CGI程式來處理的開銷。

可以完成使用PL/SQL網狀和PL/SQL Web Tookit來生成基於瀏覽器的Web應用。

PL/SQL閘道器允許Web瀏覽器通過HTTP監聽呼叫PL/SQL儲存子程式。mod_plsqlPL/SQL閘道器的一個實現,是Oracle HTTP Server的一個外掛,允許Web瀏覽器呼叫PL/SQL儲存子程式。

PL/SQL Web Tookit是一個PL/SQL包的集合,提供了通過mod_plsql在執行時使用儲存子程式的通用介面。

1.1.1.9 支援伺服器頁面開發

PL/SQL Server PagesPSPs)允許開發帶有動態內容的web頁面。PSPs是編寫儲存子程式的一種替代,每次為web頁面寫一行html程式碼。

特定的標籤允許在html程式碼中嵌入PL/SQL指令碼。在客戶端如瀏覽器請求頁面時指令碼執行。指令碼可以接受引數,查詢和更新資料庫,然後顯示一個自定義的頁面來展示結果。

在開發過程中,PSPs的行為像一個模板,擁有頁面佈局的靜態部分和內容的動態部分。可以使用喜愛的HTML權威工具設計頁面佈局,為動態內容留有點位符。然後可以使用PL/SQL指令碼產生內容。結束後,可以以儲存子程式形式將PSP檔案載入到資料庫上。

1.1.2 PL/SQL的主要功能

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

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

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

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

相關文章