oracle – PL / SQL:如何声明会话变量?

前端之家收集整理的这篇文章主要介绍了oracle – PL / SQL:如何声明会话变量?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何在PL / sql中声明一个会话变量 – 只会在会话期间持续一个会话变量,而不必将它存储在数据库本身中?
您可以使用“用户创建的上下文”来存储会话中多个单元共享的数据.

首先,创建一个上下文:

CREATE CONTEXT SYS_CONTEXT ('userenv','current_schema')|| '_ctx' USING PKG_COMMON

其次,创建一个可以管理您的上下文的包:

CREATE OR REPLACE PACKAGE PKG_COMMON
IS
   common_ctx_name   CONSTANT VARCHAR2 (60)
                 := SYS_CONTEXT ('userenv','current_schema')
                    || '_ctx';

   FUNCTION fcn_get_context_name RETURN VARCHAR2;
   PROCEDURE prc_set_context_value (var_name VARCHAR2,var_value NUMBER);
END;

CREATE OR REPLACE PACKAGE BODY PKG_COMMON
IS
   FUNCTION fcn_get_context_name
      RETURN VARCHAR2
   IS
   BEGIN
      RETURN common_ctx_name;
   END;

   PROCEDURE prc_set_context_value (var_name VARCHAR2,var_value NUMBER)
   IS
   BEGIN
      DBMS_SESSION.set_context (common_ctx_name,var_name,var_value);
   END;
END;

prc_set_context_value可以更高级,这只是一个例子.
随着上下文和包创建,您可以开始使用它们.
使用过程调用设置上下文变量

begin
  PKG_COMMON.prc_set_context_value('MyVariable',9000)
end;

并在任何地方使用任何程序,包,功能或事件视图.

CREATE VIEW V_TEST AS
  SELECT ID,LOGIN,NAME 
    FROM USERS 
   WHERE ROLE_ID =  SYS_CONTEXT(PKG_COMMON.FCN_GET_CONTEXT_NAME,'MyVariable')

有关更多信息,请参阅http://www.psoug.org/reference/sys_context.html

猜你在找的Oracle相关文章