全局变量的类型

有三种不同的方法对全局变量进行分类: 通过变量的所有权,通过值的作用域,以及通过用于维护值的方法。

变量的所有权

可以根据变量是由数据库管理器拥有,还是如果变量是用户定义的,对全局变量进行分类:
  • 数据库管理器将创建 内置全局变量。 内置全局变量将向系统目录中的数据库管理器注册。 内置全局变量属于以下模式:
    • SYSIBM
    • SYSIBMADM
    某些内置 模块全局变量 位于 SYSIBMADM 模式中的模块内。
  • 用户使用 SQL DDL 语句创建 用户定义的全局变量 。 用户定义的全局变量将向系统目录中的数据库管理器注册。 用户定义的模式全局变量 是使用 CREATE VARIABLE SQL 语句创建的。 用户定义的模块全局变量 是使用 ALTER MODULE SQL 语句的 ADD VARIABLE 或 PUBLISH VARIABLE 选项创建的。

值的作用域

可以根据值的作用域将全局变量分类为会话或数据库:
  • 会话全局变量 的值与使用此特定全局变量的每个会话唯一关联。 会话全局变量是内置全局变量或用户定义的全局变量。
  • 数据库全局变量 的值是单个值,对于使用此特定全局变量的所有会话,该值保持不变。 数据库全局变量始终是内置全局变量。

维护值的方法

可以根据变量的维护方式对全局变量进行分类:
  • 当首次在会话或数据库中引用全局变量时, 常量全局变量 具有基于 CONSTANT 子句的求值实例化的固定值,具体取决于全局变量的作用域。 此类型的全局变量是使用 CREATE VARIABLE 语句中的 CONSTANT 子句创建的。 不能使用 SQL 语句将值赋给全局变量。 常量全局变量是只读全局变量。
  • 按系统维护的全局变量 具有由数据库管理器设置的值。 无法使用 SQL 语句指定值。 只能将内置全局变量定义为按系统维护的全局变量,而大多数内置全局变量定义为按系统维护的全局变量。 按系统维护的全局变量是只读全局变量。
  • 可以使用 SQL 语句为 按用户维护的全局变量 赋值; 但是,此赋值需要对全局变量具有 WRITE 特权。 此类型的全局变量是在不使用 CONSTANT 子句的情况下定义的用户定义全局变量的缺省值。 还可以定义内置全局变量,以便可以使用 SQL 语句来赋值。