DBMS_SESSION包小議(七)
除了使用ALTER SESSION設定會話的狀態,利用V$SESSION查詢會話狀態,Oracle還提供了PL/SQL介面DBMS_SESSION來查詢和設定會話相關的狀態。
描述RESET_PACKAGE和MODIFY_PACKAGE_STATE過程。
DBMS_SESSION包小議(一):http://yangtingkun.itpub.net/post/468/498365
DBMS_SESSION包小議(二):http://yangtingkun.itpub.net/post/468/498408
DBMS_SESSION包小議(三):http://yangtingkun.itpub.net/post/468/498451
DBMS_SESSION包小議(四):http://yangtingkun.itpub.net/post/468/498475
DBMS_SESSION包小議(五):http://yangtingkun.itpub.net/post/468/498559
DBMS_SESSION包小議(六):http://yangtingkun.itpub.net/post/468/498666
一般來說設定會話級的狀態都是透過ALTER SESSION語句,也有個別的例外,比如角色的設定是透過SET語句實現的。Oracle除了提供SQL的方法外,還提供了PL/SQL的介面,DBMS_SESSION包,將會話狀態的設定和查詢整合在這個包中。
其實RESET_PACKAGE過程可以由MODIFY_PACKAGE_STATE過程代替,MODIFY_PACKAGE_STATE(DBMS_SESSION.FREE_ALL_RESOURCES)就等價於RESET_PACKAGE,利用這個過程可以清除會話中開啟的所有的包的狀態,包括包中的變數會被重置,遊標會被關閉。而對於MODIFY_PACKAGE_STATE(DBMS_SESSION.REINITIALIZE)則同樣會重新初始化所有的變數,但是包分配的內容並不會釋放,而是直接重用,包括遊標雖然被關閉,但是仍然保留在快取中,因此使用後者一般具有更好的效能。
看一個簡單的例子來說明這個過程的功能:
SQL> CREATE OR REPLACE PACKAGE PA_TEST AS
2 GV_NUM NUMBER;
3 GV_DATE DATE;
4 PROCEDURE P_DISPLAY;
5 END;
6 /
程式包已建立。
SQL> CREATE OR REPLACE PACKAGE BODY PA_TEST AS
2
3 PROCEDURE P_DISPLAY AS
4 BEGIN
5 DBMS_OUTPUT.PUT_LINE('GV_NUM:' || GV_NUM);
6 DBMS_OUTPUT.PUT_LINE('GV_DATE:' || TO_CHAR(GV_DATE, 'YYYY-MM-DD HH24:MI:SS'));
7 END;
8
9 BEGIN
10 GV_NUM := 1;
11 GV_DATE := SYSDATE;
12
13 DBMS_LOCK.SLEEP(5);
14 END;
15 /
程式包體已建立。
SQL> SET SERVEROUT ON
SQL> SET TIMING ON
SQL> EXEC PA_TEST.P_DISPLAY
GV_NUM:1
GV_DATE:2010-03-29 06:31:06
PL/SQL 過程已成功完成。
已用時間: 00: 00: 05.01
SQL> EXEC PA_TEST.P_DISPLAY
GV_NUM:1
GV_DATE:2010-03-29 06:31:06
PL/SQL 過程已成功完成。
已用時間: 00: 00: 00.00
包在第一個被呼叫時,要進行初始化,而再次呼叫就不需要了。
當執行了MODIFY_PACKAGE_STATE過程後,再次呼叫包的過程,就會發現這個包還需要重新初始化:
SQL> EXEC DBMS_SESSION.MODIFY_PACKAGE_STATE(DBMS_SESSION.REINITIALIZE)
PL/SQL 過程已成功完成。
已用時間: 00: 00: 00.01
SQL> EXEC PA_TEST.P_DISPLAY
PL/SQL 過程已成功完成。
已用時間: 00: 00: 05.00
SQL> SET SERVEROUT ON
SQL> EXEC PA_TEST.P_DISPLAY
GV_NUM:1
GV_DATE:2010-03-29 06:34:25
PL/SQL 過程已成功完成。
已用時間: 00: 00: 00.01
從上面的結果看到,不僅PA_TEST包被重置,連DBMS_OUTPUT包的狀態也被重置,必須重新SET SERVEROUT ON,否則DBMS_OUTPUT無法輸出結果到螢幕。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-630590/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DBMS_SESSION包小議(八)Session
- DBMS_SESSION包小議(六)Session
- DBMS_SESSION包小議(五)Session
- DBMS_SESSION包小議(四)Session
- DBMS_SESSION包小議(三)Session
- DBMS_SESSION包小議(二)Session
- DBMS_SESSION包小議(一)Session
- 小議Oracle外來鍵約束脩改行為(七)Oracle
- 七,包裝類
- tshark 抓包 mysql 協議包MySql協議
- 網路七層協議協議
- WireShark——IP協議包分析(Ping分析IP協議包)協議
- oracle dbms包和其他包的使用大全 (七)Oracle
- Scala學習(七)---包和引入
- 小議解析parse
- oracle nomount小議Oracle
- Netty拾遺(七)——粘包與拆包問題Netty
- HTTP協議資料包HTTP協議
- OSI七層模型 -tcp/ip協議模型TCP協議
- OSI七層網路協議 、TCP協議TCP
- TCP協議小結TCP協議
- 詳談OSI七層網路協議和TCP/IP協議協議TCP
- UDP協議抓包分析 -- wiresharkUDP協議
- Javascript 閉包小結JavaScript
- 網路七層協議之物理層協議
- 計算機網路七層協議計算機網路協議
- 實驗七————EIGRP協議配置協議
- OSI七層模型的功能及協議模型協議
- 字串*-小鑫の日常系列故事(七)——小紙條字串
- 深入理解javascript系列(七):閉包(1)JavaScript
- 小知識二、Then協議協議
- 資料庫安全小議資料庫
- 小議“資料開放”
- 小議星型轉換
- 小議軟體測試
- 伺服器防護的七個建議伺服器
- MapReduce: 提高MapReduce效能的七點建議[譯]
- Http網路協議包 (快速理解)HTTP協議