GLOBAL 关键字表示跟随的变量的引用作用域包含所有在给定的 DB-Access 或 SQL 管理 API 会话中运行的 SPL 例程。这些变量的数据类型必须与全局环境中的变量数据类型相匹配。全局变量是由所有 SPL 例程使用的内存。这些例程在给定的 DB-Access 或 SQL 管理 API 会话中运行。全局变量的值存储在内存中。
在当前会话中运行的 SPL 例程共享全局变量。因为数据库服务器不将全局变量保存在数据库中,所有当前会话关闭时不保留全局变量。
全局变量的第一个声明建立全局环境中的变量;后续全局声明只是将该变量绑定到全局环境并在此时建立变量的值。
CREATE PROCEDURE proc1() ... DEFINE GLOBAL gl_out INT DEFAULT 13; ... LET gl_out = gl_out + 1; END PROCEDURE;
CREATE PROCEDURE proc2() ... DEFINE GLOBAL gl_out INT DEFAULT 23; DEFINE tmp INT; ... LET tmp = gl_out END PROCEDURE;
如果首先调用 proc1,则 gl_out 被设置为 13,然后增加为 14。如果接下来调用 proc2,它会发现 gl_out 已被定义,这样就不应用缺省值 23 。然后,proc2 将现有值 14 分配给 tmp。如果首先调用了 proc2 ,则 gl_out 会被设置为 23,并且 23 可能被分配给 tmp。以后对 proc1 的调用将不应用缺省值 13。
不同数据库服务器实例的数据库不共享全局变量,但是在单个会话中,同一个数据库服务器实例的所有数据库可以共享全局 SPL 变量。然而,数据库服务器和任何应用程序开发工具都不共享全局变量。