DB2 Version 9.5中全局变量的了解
2009-06-26 16:14:49 来源:WEB开发网任何表达式都可以引用全局变量,只要该表达式不需要保持确定性。以下这些情况需要确定性表达式,因此不能使用全局变量:
-检查约束
-生成的列的定义
-刷新直接 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 希望进行一些维护并向表插入一些较旧的数据,他必须阻止其他用户向表插入新的数据、删除触发器、执行维护、重新创建触发器,维护完之后才能允许用户插入数据。
- ››db2 对float类型取char后显示科学计数法
- ››DB2中出现SQL1032N错误现象时的解决办法
- ››DB2 锁升级示例
- ››db2诊断系列之---定位锁等待问题
- ››db2 命令选项解释
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 基础: 表空间和缓冲池
- ››DB2 XML 编程,第 1 部分: 理解 XML 数据模型
- ››DB2 pureScale 实战
更多精彩
赞助商链接