Pet*_*byl 17
使用包规范中的变量创建新包,如下所示:
CREATE PACKAGE my_public_package IS
my_var Number;
END;
Run Code Online (Sandbox Code Playgroud)
现在,您可以访问任何可访问my_public_package的代码中的变量
...
my_public_package.my_var := 10;
...
Run Code Online (Sandbox Code Playgroud)
如何在PL/SQL中定义一个全局变量,该变量将在所有函数/过程/包中提供?
您可以使用全局应用程序上下文变量.
应用程序上下文是Oracle数据库存储在内存中的一组名称 - 值对.应用程序上下文有一个名为命名空间的标签,例如,empno_ctx用于检索员工ID的应用程序上下文.在上下文中是名称 - 值对(关联数组):名称指向内存中保存值的位置.应用程序可以使用应用程序上下文来访问有关用户的会话信息,例如用户ID或其他用户特定信息或客户端ID,然后将此数据安全地传递到数据库.然后,您可以使用此信息来允许或阻止用户通过应用程序访问数据.您可以使用应用程序上下文对数据库和非数据库用户进行身份验证.
如果您希望在访问变量的任何PL/SQL对象的所有会话中, v 值可能相同,则使用数据库表来存储该值.
例如,正如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;
/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54077 次 |
| 最近记录: |