PL/SQL經典學習筆記(2-5)
1 Oracle® Database PL/SQL Language Reference 11g Release 2 (11.2) Part Number E25519-03
1.1 PL/SQL新功能
1.1.1 版本11.2.0.2新功能
如果在整個會話生命週期宣告是不變的,則包被認為是無狀態的。
在11.2.0.2之前,如果一個會話編譯了一個有狀態的包的包體,並且已經例項化該包的其它會話已經引用了它,則後面的會話將會產生一個嚴重的破壞性的錯誤ora-04068,因此進行hot-patching的包可能會使它的使用者陷入混亂。
對於在編譯時包的所有成員保持不變的包來講就屬於這種情況。因此hot-patching包就會很少可能破壞正在使用它的會話了。
1.1.2 版本11.2.0.1新功能
DBMS_PARALLEL_EXECUTE包
該包允許不斷地以並行的方式更新大表中的資料,使用2個高層次的步驟:
n 將表中的行集分組到更小的chunks中。
n 並行地應用希望的update語句,每當一個chunk處理完成之後進行提交。
建議:當更新大量資料的時候採用此技術。可以提高效能、降低迴滾空間的消耗、減少持有的行鎖的數量。
在create type語句中的force選項
在11.2之前,如果一個create or replace type語句指定一個存在的型別,而這個型別具有型別依賴或表依賴,則該語句會失敗返回錯誤ora-02303。從11.2開始,如果你指定force,該語句只在指定的型別有表依賴時會失敗。
crossedition觸發器
該觸發器是在DML語句改變資料庫表,而與此同時一個使用該表的線上應用程式正在使用基於版本的重定義進行補丁或更新。crossedition觸發器的體被設計用來處理這些改變,這樣可以在應用程式程式碼改變結束後被正確地應用。
alter type語句對於特定版本ADT的限制
如果你使用基於版本的重定義來補丁或升級應用程式,則你就使用了版本物件。如果你的任何版本物件是ADT(抽象資料型別),則參考型別限制。
alter type語句的reset選項
該選項重新設定型別的版本為1,所以它不再會被認為是演化了。
自動檢測結果快取函式的資料來源
在11.2之前,必須指定快取結果依賴的資料來源。
而11.2中資料庫可以自動檢測到結果快取函式執行時查詢的所有資料來源。
在Oracle RAC環境中結果快取不再是私有的
對於11.1在Oracle RAC環境中的每個資料庫例項都有一個私有的函式結果快取,只有在那個例項上的會話才可以訪問。如果在本地例項的私有緩衝區中沒有需要的結果,則函式體會執行以計算結果,然後結果被載入到本地緩衝區中。結果不是從其它例項的私有緩衝區獲得的。
對於11.2每個資料庫例項管理管理它們自己的本地結果緩衝區,但本地的結果緩衝區不再是私有的了,連線到遠端資料庫例項的會話可以訪問它的內容。如果在本地例項緩衝區中沒有需要的結果,則結果可能從其它例項的本地緩衝區獲得,而不是在本地計算。
1.1.3 版本11.1 新功能
正規表示式SQL函式的增強
正規表示式SQL函式regexp_instr和regexp_substr功能已經增強。
還有一個新的函式regexp_count,返回模式在字串中出現的次數。
simple_integer, simple_float和simple_double資料型別
這4種資料型別分別是預定義pls_integer, binary_float, binary_double的子型別。每個型別與其對應的基型別有相同的範圍,有not null約束。
simple_integer與pls_integer在溢位語義上有很在差別,但simple_float和simple_double除了not null約束外,與基型別相同。
如果值不會為null,並且溢位檢查不是必須的,則可以使用simple_integer型別。
如果值不會為null,也可以使用simple_float和simple_double。
因為沒有通常的檢查null和溢位的開銷,這些子型別可以比它們的基型別提供顯著的更好的效能,當PLSQL_CODE_TYPE='NATIVE',因為對simple_integer的算術操作直接在硬體上完成;如果PLSQL_CODE_TYPE='INTERPRETED',則效能提升很小。
continue語句
使用該語句可以退出迴圈的當次迭代,並將控制權轉向下一次迭代。continue語句有2種形式:
n continue(無條件的)
n continue when (有條件的)
PL/SQL表示式中的序列
偽列currval和nextval使得書寫PL/SQL源文字更容易,並提高執行時的效能和可擴充套件性。
可以在使用number表示式的地方使用 序列名.curval和序列名.nextval。
動態SQL加強
無論是本地動態SQL還是dbms_sql包都得到了增強。
本地動態SQL現在支援clob,所以支援超過32KB的動態SQL語句。
在DBMS_SQL包中:
n 所有本地動態SQL支援的型別都支援。
n dbms_sql.parse函式接受clob引數,允許動態SQL語句超過32KB。
n dbms_sql.to_refcursor函式允許將dbms_sql包轉換為本地動態SQL。
n dbms_sql.to_cursor函式允許將本地動態SQL轉換為dbms_sql包
PL/SQL子程式呼叫中的命名和混合記法
在11.1之前,一個呼叫PL/SQL子程式的SQL語句必須按位置指定實參。
而11.1中基於命名的和混合的記法都是允許的。
這樣當SQL語句呼叫一個有多個預設引數的PL/SQL子程式並且只有少數實參需要提供與預設值不同的值時,可以提高可用性。
create or replace function compute_bonus(emp_id NUMBER, bonus NUMBER) return number is emp_sal number; begin select salary into emp_sal from employees where employee_id = emp_id;
return emp_sal + bonus; end compute_bonus; / select compute_bonus(120, 50) from dual; -- 基於位置 select compute_bonus(bonus => 50, emp_id => 120) from dual; -- 命名 select compute_bonus(120, bonus => 50) from dual; -- 混合 |
PL/SQL函式結果快取
函式結果快取可以節省相當的空間和時間。每次使用不同的引數呼叫結果快取函式時,這些引數和結果被儲存到緩衝區中,然後當使用相同的引數呼叫相同的函式時,會從緩衝區獲取結果,而 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE 來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-752444/,如需轉載,請註明出處,否則將追究法律責任。相關文章
- PL/SQL經典學習筆記(6-10)SQL筆記
- PL/SQL學習筆記-1SQL筆記
- PL/SQL學習筆記-2SQL筆記
- PL/SQL學習筆記-3SQL筆記
- PL/SQL學習筆記-4SQL筆記
- PL/SQL學習筆記-5SQL筆記
- PL/SQL學習筆記-6SQL筆記
- [PL/SQL]10g PL/SQL學習筆記(一)SQL筆記
- [PL/SQL]10g PL/SQL學習筆記(二)SQL筆記
- [PL/SQL]10g PL/SQL學習筆記(三)SQL筆記
- PL/SQL學習筆記-總結SQL筆記
- PL/SQL 學習日記SQL
- oracle學習筆記(十七) PL/SQL高階應用Oracle筆記SQL
- OCP 複習筆記之PL/SQL (3)筆記SQL
- OCP 複習筆記之PL/SQL (5)筆記SQL
- OCP 複習筆記之PL/SQL (1)筆記SQL
- OCP 複習筆記之PL/SQL (4)筆記SQL
- OCP 複習筆記之PL/SQL (2)筆記SQL
- oracle學習筆記(十五) PL/SQL語法結構以及使用Oracle筆記SQL
- SQL學習筆記SQL筆記
- 《SQL 反模式》 學習筆記SQL模式筆記
- spark學習筆記--Spark SQLSpark筆記SQL
- 【PL/SQL 學習】隱式遊標學習SQL
- Unix 入門經典 筆記筆記
- Java學習筆記--sql與javaJava筆記SQL
- Java學習筆記--sql語句Java筆記SQL
- Oracle之PL/SQL基礎學習OracleSQL
- 強化學習-學習筆記10 | 經驗回放強化學習筆記
- css經典佈局學習CSS
- SQL學習筆記—非select操作SQL筆記
- [SQL] Datawhale 學習筆記 Task04SQL筆記
- Mybatis學習筆記(6)-動態SQLMyBatis筆記SQL
- 【筆記】statspack 學習(二) sql調整筆記SQL
- SQL Server工作平臺學習筆記SQLServer筆記
- pl/sql練習SQL
- pl/sql 練習SQL
- 深度學習與神經網路學習筆記一深度學習神經網路筆記
- oracle約束學習經典案例Oracle