CURRENT TEMPORAL SYSTEM_TIME, registro especial

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

Cuando una consulta hace referencia a una tabla temporal de período del sistema y el valor del registro especial CURRENT TEMPORAL SYSTEM_TIME no es el valor nulo, la siguiente especificación de período es implícita:

FOR SYSTEM_TIME AS OF CURRENT TEMPORAL SYSTEM_TIME

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 PREDETERMINADOS, 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 SYSTEM_TIME. Si cambia el valor dentro de una rutina, ese nuevo valor no se devuelve a la aplicación que lo invoca.

Cuando el valor del registro especial CURRENT TEMPORAL SYSTEM_TIME no es nulo y la opción de enlace SYSTIMESENSITIVE está establecida en YES, no se puede especificar explícitamente FOR SYSTEM_TIME en una sentencia select.

ejemplos

Ejemplo de una consulta que hace referencia a una tabla temporal de período de sistema
Supongamos las siguientes condiciones:
  • STT es una tabla temporal de período de sistema, y POLICY_ID es una columna de STT.
  • El valor de la opción de enlace SISTEMASENSIBLE es SÍ.
  • El valor de CURRENT TEMPORAL SYSTEM_TIME no es nulo.

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

SELECT * FROM STT
WHERE POLICY_ID = 123;

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

SELECT * FROM STT
FOR SYSTEM_TIME AS OF CURRENT TEMPORAL SYSTEM_TIME
WHERE POLICY_ID = 123;
Ejemplo de un procedimiento que utiliza CURRENT TEMPORAL SYSTEM_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 SYSTEM_TIME INTO VAR1
 FROM SYSIBM.SYSDUMMY1;

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

 SELECT CURRENT TEMPORAL SYSTEM_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 SYSTEM_TIME = TIMESTAMP('2008-01-01') + 5 DAYS ;

CALL MYPROC(VAR1, VAR2);

SELECT CURRENT TEMPORAL SYSTEM_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 SYSTEM_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 SYSTEM_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 SYSTEM_TIME establecido 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 una tabla temporal de período de sistema
Supongamos que IN_TRAY es una tabla temporal del sistema que contiene usuarios y líneas de asunto para las notas en la bandeja de entrada. La siguiente consulta devuelve los ID de usuario y las líneas de asunto basados en el estado de los mensajes en IN_TRAY a partir de la fecha especificada por el registro especial CURRENT TEMPORAL SYSTEM_TIME.
SELECT SOURCE, SUBJECT
FROM IN_TRAY

Si el registro especial se establece en un valor no nulo, la declaración anterior es equivalente a la siguiente declaración:

SELECT SOURCE, SUBJECT
FROM IN_TRAY
FOR SYSTEM_TIME AS OF CURRENT TEMPORAL SYSTEM_TIME