如何在PL/SQL中定义可在所有函数/过程/包中使用的全局变量?
有没有可能定义?
或者,有没有其他方法可以做到这一点?
发布于 2015-03-31 14:58:38
使用包规范中的变量创建新包,如下所示:
CREATE PACKAGE my_public_package IS
my_var Number;
END;现在,您可以通过访问my_public_package来访问任何代码中的变量
...
my_public_package.my_var := 10;
...发布于 2015-03-31 15:07:35
如何在PL/SQL中定义可在所有函数/过程/包中使用的全局变量?
你可以使用Global Application Context variable。
应用程序上下文是
数据库存储在内存中的一组名称-值对。应用程序上下文有一个称为名称空间的标签,例如,用于检索员工ID的应用程序上下文的empno_ctx。在上下文中是名称-值对(一个关联数组):名称指向内存中保存该值的位置。应用程序可以使用应用程序上下文来访问有关用户的会话信息,例如用户ID或其他特定于用户的信息,或者客户端ID,然后将此数据安全地传递给数据库。然后,您可以使用此信息来允许或阻止用户通过应用程序访问数据。您可以使用应用程序上下文对数据库和非数据库用户进行身份验证。
如果希望访问变量的任何PL/对象的所有会话的v SQL变量值都相同,则使用数据库表来存储该值。
例如,正如T.Kyte建议的那样,here
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;
/ 发布于 2020-05-17 01:29:50
variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT initial_value] https://stackoverflow.com/questions/29362332
复制相似问题