DBMS_SESSION內置包提供了從PL/SQL訪問SQL ALTER SESSION
和SET ROLE
語句以及其他會話信息的能力。
DBMS_SESSION子程序總覽
子程序 | 說明 |
CLEAR_ALL_CONTEXT Procedure | 清除指定命名空間的全部上下文屬性。 |
CLEAR_CONTEXT Procedure | 清除指定命名空間的特定上下文屬性。 |
LIST_CONTEXT Procedure | 返回當前會話的活躍命名空間和上下文列表。 |
SET_CONTEXT Procedure | 設置或者重置上下文屬性的值。 |
SET_ROLE Procedure | 設置當前上下文的角色。 |
SLEEP Procedure | 將當前的會話暫停指定的時長。 |
CLEAR_ALL_CONTEXT
該存儲過程用于清除指定命名空間的全部上下文屬性。
語法
DBMS_SESSION.CLEAR_ALL_CONTEXT(
namespace IN VARCHAR2);
參數說明
參數 | 說明 |
namespace | 待清除上下文的命名空間。 |
示例
該示例清除了指定上下文的全部屬性值。
EXEC DBMS_SESSION.CLEAR_ALL_CONTEXT('test_ctx');
CLEAR_CONTEXT
該存儲過程用于清除指定命名空間的特定上下文屬性。
語法
DBMS_SESSION.CLEAR_CONTEXT(
namespace IN VARCHAR2,
client_identifier IN VARCHAR2 DEFAULT NULL,
attribute IN VARCHAR2 DEFAULT NULL);
參數說明
參數 | 說明 |
namespace | 待清除上下文的命名空間。 |
client_identifier | (可選參數)兼容性提供參數。默認值為NULL。 |
attribute | (可選參數)命名空間中的具體屬性名稱。默認值為NULL。 |
示例
該示例展示了如何清除上下文的指定屬性值。
CREATE CONTEXT test_ctx USING ctx_pkg;
DECLARE
val VARCHAR2(20);
BEGIN
DBMS_SESSION.SET_CONTEXT('test_ctx', 'a', '1');
val := SYS_CONTEXT('test_ctx', 'a');
DBMS_OUTPUT.PUT_LINE('a of test_ctx is:' || val);
DBMS_SESSION.CLEAR_CONTEXT('test_ctx', NULL, 'a');
val := SYS_CONTEXT('test_ctx', 'a');
IF val IS NULL THEN
DBMS_OUTPUT.PUT_LINE('The a of test_ctx has been cleared');
END IF;
END;
-- a of test_ctx is:1
-- The a of test_ctx has been cleared
LIST_CONTEXT
該存儲過程用于返回當前會話的活躍命名空間和上下文列表。
語法
該存儲過程使用了自定義類型作為參數,該類型的語法和存儲過程的語法如下:
TYPE AppCtxRecTyp IS RECORD (
namespace VARCHAR2(30),
attribute VARCHAR2(30),
value VARCHAR2(256));
TYPE AppCtxTabTyp IS TABLE OF AppCtxRecTyp;
DBMS_SESSION.LIST_CONTEXT (
list OUT AppCtxTabTyp,
size OUT NUMBER);
參數說明
參數 | 說明 |
list | 當前會話中的(命名空間、屬性、值)的列表。 |
size | list中條目的數量。 |
示例
該示例首先設置一些上下文屬性,隨后通過LIST_CONTEXT
返回當前會話的活躍命名空間和上下文屬性以及值。
CREATE CONTEXT test_ctx USING ctx_pkg;
DECLARE
att DBMS_SESSION.AppCtxTabTyp;
num NUMBER;
BEGIN
-- set context some values which can be listed later
DBMS_SESSION.SET_CONTEXT('test_ctx', 'a', '1');
DBMS_SESSION.SET_CONTEXT('test_ctx', 'b', '2');
-- list all attributes in context
DBMS_SESSION.LIST_CONTEXT(att, num);
DBMS_OUTPUT.PUT_LINE('Number of attrs in context is: ' || num);
DBMS_OUTPUT.PUT_LINE('The first attr is: ' || att(1).attribute);
DBMS_OUTPUT.PUT_LINE('The first value is: ' || att(1).value);
DBMS_OUTPUT.PUT_LINE('The second attr is: ' || att(2).attribute);
DBMS_OUTPUT.PUT_LINE('The second value is: ' || att(2).value);
END;
-- Number of attrs in context is: 2
-- The first attr is: a
-- The first value is: 1
-- The second attr is: b
-- The second value is: 2
SET_CONTEXT
該存儲過程用于設置或者重置上下文屬性的值。
語法
DBMS_SESSION.SET_CONTEXT (
namespace IN VARCHAR2,
attribute IN VARCHAR2,
value IN VARCHAR2,
username IN VARCHAR2 DEFAULT NULL,
client_id IN VARCHAR2 DEFAULT NULL);
參數說明
參數 | 說明 |
namespace | 待設置上下文的命名空間。 |
attribute | 待設置的上下文屬性。 |
value | 屬性值。 |
username | (可選參數)兼容性提供參數。默認值為NULL。 |
client_id | (可選參數)兼容性提供參數。默認值為NULL。 |
示例
該示例通過SET_CONTEXT設置上下文屬性的值。
CREATE CONTEXT test_ctx USING ctx_pkg;
DECLARE
val varchar(20);
BEGIN
DBMS_SESSION.SET_CONTEXT('test_ctx', 'attr', '1');
val := SYS_CONTEXT('test_ctx', 'attr');
DBMS_OUTPUT.PUT_LINE('attr is:' || val);
END;
-- attr is:1
SET_ROLE
該存儲過程用于設置當前上下文的角色。
語法
DBMS_SESSION.SET_ROLE (
role_cmd IN VARCHAR2);
參數說明
參數 | 說明 |
role_cmd | 以字符串的格式指定的角色名稱。 |
示例
該示例展示了如何設置會話上下文的角色。
CREATE USER test_ctx_usr IDENTIFIED BY "passwd";
DECLARE
usr varchar(20);
BEGIN
DBMS_SESSION.SET_ROLE('test_ctx_usr');
usr := SYS_CONTEXT('USERENV', 'SESSION_USER');
-- SESSION USER IS: test_ctx_usr
DBMS_OUTPUT.PUT_LINE('SESSION USER IS: ' || usr);
END;
SLEEP
該存儲過程用于將當前的會話暫停指定的時長。
語法
DBMS_SESSION.SLEEP (
seconds IN NUMBER);
參數說明
參數 | 說明 |
seconds | 暫停會話的時長(以秒為單位)。 |
示例
該示例展示了如何將會話暫停指定的時長。
EXEC DBMS_SESSION.SLEEP(2);