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.SYSDUMMY1Despué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_TRAYSi 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