WEB开发网
开发学院数据库DB2 DB2 Version 9.5中全局变量的了解 阅读

DB2 Version 9.5中全局变量的了解

 2009-06-26 16:14:49 来源:WEB开发网   
核心提示: 任何表达式都可以引用全局变量,只要该表达式不需要保持确定性,DB2 Version 9.5中全局变量的了解(4),以下这些情况需要确定性表达式,因此不能使用全局变量:-检查约束-生成的列的定义-刷新直接 Materialized Query Tables (MQTs)-如上文所述,如果您的

任何表达式都可以引用全局变量,只要该表达式不需要保持确定性。以下这些情况需要确定性表达式,因此不能使用全局变量:

-检查约束

-生成的列的定义

-刷新直接 Materialized Query Tables (MQTs)

-如上文所述,每个会话对于给定的全局变量都具有自己的私有值。当在会话中第一次引用时,全局变量将进行实例化来获得其默认值。

要查询当前用户所在部门的全部员工,使用以下语句:

  SELECT * FROM hr.employees WHERE> deptno = schema1.gvDeptno

要查询本地变量 hv_depnot 的用户部门编号,使用以下语句:

  EXEC SQL VALUES schema1.gvDeptno INTO :hv_deptno

要查询用户的部门编号,使用以下语句:

   VALUES schema1.gvDeptno

可以使用 SET, SELECT INTO, VALUES INTO 语句改变全局变量的值。也可以作为调用语句的 out 或 input 参数的实参进行修改。

例如,要将 mySchema.defaultPrinter 变量的值修改为 “Printer002”,使用以下语句:

  SET mySchema.defaultPrinter = 'Printer002'

要修改 schema1.activeEmployees 的值,使用以下语句:

  EXEC SQL SELECT count(*) INTO schema1.activeEmployees
  FROM hr.employees WHERE active = ‘Y’

示例

现在您已经了解了如何使用全局变量执行简单的操作,本节将提供一些有趣的场景以展示如何使用它们。

使用全局变量关闭触发器以进行维护

全局变量的一项有趣应用就是控制触发器的行为。例如,如果您的表具有以下触发器:

  CREATE TRIGGER validate_t
  BEFORE INSERT ON T
  REFERENCING NEW AS N FOR EACH ROW
  WHEN (N.ORDER_DATE < CURRENT TIMESTAMP – 7 DAYS)
  SIGNAL SQLSTATE ‘38000’
  SET MESSAGE TEXT = ‘ORDER DATE TOO OLD’;

如果 DBA 希望进行一些维护并向表插入一些较旧的数据,他必须阻止其他用户向表插入新的数据、删除触发器、执行维护、重新创建触发器,维护完之后才能允许用户插入数据。

上一页  1 2 3 4 

Tags:DB Version 全局

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接