文档

DBMS_SESSION

更新时间:

DBMS_SESSION内置包提供了从PL/SQL访问SQL ALTER SESSIONSET 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);
  • 本页导读 (0)
文档反馈