CURRENT TEMPORAL BUSINESS_TIME, registro especial

El registro especial CURRENT TEMPORAL BUSINESS_TIME especifica un valor TIMESTAMP(12) que se utiliza en la especificación de período BUSINESS_TIME por omisión para las referencias a tablas temporales de período de aplicación.

Cuando una consulta hace referencia a una tabla temporal de período de aplicación y el valor del registro especial CURRENT TEMPORAL BUSINESS_TIME no es el valor nulo, la consulta se ve afectada de la siguiente manera:

  • Si las columnas de un periodo BUSINESS_TIME se definen como TIMESTAMP, la siguiente especificación de periodo es implícita:
    FOR BUSINESS_TIME AS OF CURRENT TEMPORAL BUSINESS_TIME 
  • Si las columnas de un periodo BUSINESS_TIME se definen como DATE, la siguiente especificación de periodo es implícita: :
    FOR BUSINESS_TIME AS OF CAST(CURRENT TEMPORAL BUSINESS_TIME AS DATE)

El valor inicial del registro especial depende del contexto de la siguiente manera:

  • Si el registro especial está en un desencadenador, el valor inicial se hereda de la aplicación que lo invoca.
  • Si el registro especial se encuentra en una función o procedimiento definido por el usuario que se define con la opción HEREDAR REGISTROS ESPECIALES, el valor inicial se hereda de la aplicación que lo invoca.
  • Si el registro especial se encuentra en una función o procedimiento definido por el usuario que se define con la opción REGISTROS ESPECIALES POR DEFECTO, el valor inicial es el valor nulo.
  • En otros contextos, el valor inicial del registro especial es el valor nulo.

Puede cambiar el valor del registro especial utilizando la instrucción SET CURRENT TEMPORAL BUSINESS_TIME. Si cambia el valor dentro de una rutina, ese nuevo valor no se devuelve a la aplicación que lo invoca.

ejemplos

Ejemplo de una consulta que hace referencia a una tabla temporal de período de aplicación
Supongamos las siguientes condiciones:
  • ATT es una tabla temporal del período de aplicación y POLICY_ID es una columna en ATT.
  • El valor de la opción de enlace BUSTIMESENSITIVE es SÍ.
  • El valor de CURRENT TEMPORAL BUSINESS_TIME no es nulo.

A continuación, suponga que realiza la siguiente consulta:

SELECT * FROM ATT
WHERE POLICY_ID = 123;

Db2 genera una especificación de período BUSINESS_TIME implícita para la consulta de la siguiente manera:

SELECT * FROM ATT
FOR BUSINESS_TIME AS OF CURRENT TEMPORAL BUSINESS_TIME
WHERE POLICY_ID = 123;
Ejemplo de un procedimiento que utiliza CURRENT TEMPORAL BUSINESS_TIME
Supongamos que el procedimiento MYPROC se define de la siguiente manera:
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!

Supongamos que la aplicación define las variables de cadena VAR1, VAR2 y VAR3 y contiene las siguientes sentencias 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;

Después de la ejecución de las sentencias SQL, las variables tienen los siguientes valores:

  • VAR1 tiene el valor « 2008-01-06-00.00.00.000000000000 », que es el valor CURRENT TEMPORAL BUSINESS_TIME que se establece antes de que la instrucción CALL invoque el procedimiento.
  • VAR2 tiene el valor « 2011-01-06-00.00.00.000000000000 », que es el valor CURRENT TEMPORAL BUSINESS_TIME que se establece durante la instrucción CALL.
  • VAR3 tiene el valor ' 2008-01-06-00.00.00.000000000000 ', que es el valor CURRENT TEMPORAL BUSINESS_TIME que se establece antes de la instrucción CALL. Los cambios del valor del registro dentro del procedimiento no afectan a la aplicación que lo invoca.
Ejemplo de una consulta que hace referencia a CURRENT TEMPORAL BUSINESS_TIME
Supongamos que IN_TRAY es una tabla temporal del período de aplicación que contiene usuarios y líneas de asunto para notas en la bandeja de entrada. La siguiente consulta devuelve el ID de usuario y la línea de asunto de las notas de la tabla IN_TRAY que se enviaron en la fecha en la que está configurado el registro especial CURRENT TEMPORAL BUSINESS_TIME.
SELECT SOURCE, SUBJECT
FROM IN_TRAY
WHERE DATE (CURRENT TEMPORAL BUSINESS_TIME) = DATE (RECEIVED)