首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Oracle中定义PL/SQL中的全局变量?

如何在Oracle中定义PL/SQL中的全局变量?
EN

Stack Overflow用户
提问于 2015-03-31 14:50:01
回答 3查看 69.5K关注 0票数 12

如何在PL/SQL中定义可在所有函数/过程/包中使用的全局变量?

有没有可能定义?

或者,有没有其他方法可以做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-31 14:58:38

使用包规范中的变量创建新包,如下所示:

代码语言:javascript
复制
CREATE PACKAGE my_public_package IS
  my_var Number;
END;

现在,您可以通过访问my_public_package来访问任何代码中的变量

代码语言:javascript
复制
...
my_public_package.my_var := 10;
...
票数 22
EN

Stack Overflow用户

发布于 2015-03-31 15:07:35

如何在PL/SQL中定义可在所有函数/过程/包中使用的全局变量?

你可以使用Global Application Context variable

应用程序上下文是

数据库存储在内存中的一组名称-值对。应用程序上下文有一个称为名称空间的标签,例如,用于检索员工ID的应用程序上下文的empno_ctx。在上下文中是名称-值对(一个关联数组):名称指向内存中保存该值的位置。应用程序可以使用应用程序上下文来访问有关用户的会话信息,例如用户ID或其他特定于用户的信息,或者客户端ID,然后将此数据安全地传递给数据库。然后,您可以使用此信息来允许或阻止用户通过应用程序访问数据。您可以使用应用程序上下文对数据库和非数据库用户进行身份验证。

如果希望访问变量的任何PL/对象的所有会话的v SQL变量值都相同,则使用数据库表来存储该值。

例如,正如T.Kyte建议的那样,here

代码语言:javascript
复制
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;

/  
票数 10
EN

Stack Overflow用户

发布于 2020-05-17 01:29:50

代码语言:javascript
复制
variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT initial_value] 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29362332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档