gpt4 book ai didi

oracle - PL/SQL : How do I declare session variables?

转载 作者:行者123 更新时间:2023-12-02 03:01:13 24 4
gpt4 key购买 nike

如何在 PL/SQL 中声明 session 变量 - 该变量仅在 session 期间持续存在,而无需将其存储在数据库本身中?

最佳答案

您可以使用“用户创建的上下文”来存储 session 中多个单元共享的数据。

首先,创建一个上下文:

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;

并在任何地方使用它 - 任何过程、包、函数或事件、 View 。

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 - PL/SQL : How do I declare session variables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/301369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com