[英]How to define global variable in PL/SQL in Oracle?
如何在 PL/SQL 中定义一个可用于所有函数/过程/包的全局变量?
可以定义吗?
或者有没有其他方法可以做到这一点?
使用包规范中的变量创建新包,如下所示:
CREATE PACKAGE my_public_package IS
my_var Number;
END;
现在您可以通过访问 my_public_package 访问任何代码中的变量
...
my_public_package.my_var := 10;
...
如何在 PL/SQL 中定义一个可用于所有函数/过程/包的全局变量?
您可以使用Global Application Context 变量。
应用程序上下文是 Oracle 数据库存储在内存中的一组名称-值对。 应用程序上下文有一个称为命名空间的标签,例如,empno_ctx 表示检索员工 ID 的应用程序上下文。 上下文内部是名称-值对(关联数组):名称指向内存中保存值的位置。 应用程序可以使用应用程序上下文访问有关用户的会话信息,例如用户 ID 或其他特定于用户的信息,或客户端 ID,然后将此数据安全地传递到数据库。 然后,您可以使用此信息来允许或阻止用户通过应用程序访问数据。 您可以使用应用程序上下文来验证数据库和非数据库用户。
如果您希望访问变量的任何 PL/SQL 对象的所有会话中的变量值都相同,则使用数据库表来存储该值。
例如,正如 T.Kyte 在这里建议的那样
CREATE TABLE global_value(x INT);
INSERT INTO global_value VALUES (0);
COMMIT;
CREATE OR replace PACKAGE get_global
AS
FUNCTION Val
RETURN NUMBER;
PROCEDURE set_val (
p_x IN NUMBER );
END;
/
CREATE OR replace PACKAGE BODY get_global
AS
FUNCTION Val
RETURN NUMBER
AS
l_x NUMBER;
BEGIN
SELECT x
INTO l_x
FROM global_value;
RETURN l_x;
END;
PROCEDURE Set_val(p_x IN NUMBER)
AS
PRAGMA autonomous_transaction;
BEGIN
UPDATE global_value
SET x = p_x;
COMMIT;
END;
END;
/
variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT initial_value]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.