CURRENT TEMPORAL BUSINESS_TIME 专用寄存器

CURRENT TEMPORAL BUSINESS_TIME 专用寄存器指定一个 TIMESTAMP(12) 值,该值在缺省 BUSINESS_TIME 周期规范中用于引用应用程序周期时态表。

当查询引用了应用程序期间的时间表,且当前临时业务时间特殊寄存器的值不是空值时,查询将受到以下影响:

  • 如果将 BUSINESS_TIME 期间的列定义为 TIMESTAMP,则隐式指定了以下期间:
    FOR BUSINESS_TIME AS OF CURRENT TEMPORAL BUSINESS_TIME 
  • 如果将 BUSINESS_TIME 期间的列定义为 DATE,则隐含以下期间说明::
    FOR BUSINESS_TIME AS OF CAST(CURRENT TEMPORAL BUSINESS_TIME AS DATE)

特殊寄存器的初始值取决于上下文,具体如下:

  • 如果特殊寄存器位于触发器中,则初始值从调用应用程序继承。
  • 如果特殊寄存器位于使用 INHERIT SPECIAL REGISTERS 选项定义的用户自定义函数或程序中,则初始值将从调用应用程序中继承。
  • 如果特殊寄存器位于使用默认特殊寄存器选项定义的用户自定义函数或程序中,则初始值为空值。
  • 在其他情况下,特殊寄存器的初始值为空值。

您可以使用 SET CURRENT TEMPORAL BUSINESS_TIME 语句更改特殊寄存器的值。 如果在例程中更改值,则新值不会返回调用应用程序。

示例

查询示例,引用了申请期间的时间表
假设以下条件:
  • ATT是一个应用期间的时间表,而 POLICY_ID 是 ATT 中的一个列。
  • BUSTIMESENSITIVE装订选项的价值为“是”。
  • 当前时间业务_时间(CURRENT TEMPORAL BUSINESS_TIME)的值不为空。

假设您发出以下查询:

SELECT * FROM ATT
WHERE POLICY_ID = 123;

Db2 为查询生成隐式 BUSINESS_TIME 期间说明,如下所示:

SELECT * FROM ATT
FOR BUSINESS_TIME AS OF CURRENT TEMPORAL BUSINESS_TIME
WHERE POLICY_ID = 123;
使用当前时间业务时间(CURRENT TEMPORAL BUSINESS_TIME)的示例
假设程序 MYPROC 定义如下:
CREATE PROCEDURE MYPROC(OUT VAR1 VARCHAR(40), OUT VAR2 VARCHAR(40))
BEGIN
 SELECT CURRENT TEMPORAL BUSINESS_TIME INTO VAR1
 FROM SYSIBM.SYSDUMMY1;

 SET CURRENT TEMPORAL BUSINESS_TIME = TIMESTAMP('2011-01-01') + 5 DAYS ;

 SELECT CURRENT TEMPORAL BUSINESS_TIME INTO VAR2
 FROM SYSIBM.SYSDUMMY1;
END!

假设应用程序定义了字符串变量 VAR1、 VAR2 和 VAR3 ,并包含以下SQL语句:

SET CURRENT TEMPORAL BUSINESS_TIME = TIMESTAMP('2008-01-01') + 5 DAYS ;

CALL MYPROC(VAR1, VAR2);

SELECT CURRENT TEMPORAL BUSINESS_TIME INTO VAR3
FROM SYSIBM.SYSDUMMY1;

在执行SQL语句后,变量具有以下值:

  • VAR1 具有值 ' ',这是调用过程之前的当前时间业务时间值。 2008-01-06-00.00.00.000000000000
  • VAR2 具有值 ' ',这是在当前时间业务时间值中设置的当前时间业务时间值。 2011-01-06-00.00.00.000000000000
  • VAR3 具有值 ' ',这是当前时间业务时间值,在CALL语句之前设置。 2008-01-06-00.00.00.000000000000 程序中寄存器值的改变对调用应用程序没有影响。
查询示例,引用了当前时间业务时间
假设IN_TRAY是一个应用程序期间的时间表,其中包含收件箱中笔记的用户和主题行。 以下查询返回在 CURRENT TEMPORAL BUSINESS_TIME 特殊寄存器设置为当前日期时 IN_TRAY 表中笔记的用户 ID 和主题行。
SELECT SOURCE, SUBJECT
FROM IN_TRAY
WHERE DATE (CURRENT TEMPORAL BUSINESS_TIME) = DATE (RECEIVED)