Descripción: Crea, pone o saca una variable en uno de los namespaces que el usuario puede escribir: USER_SESSION y USER_TRANSACTION

Tipo de resultado: Integer

Sintaxis:

RDB$SET_CONTEXT(‘<namespace<‘, ‘<nombre_variable>’, <valor> | NULL)

<namespace> = USER_SESSION | USER_TRANSACTION

<nombre_variable> = una cadena (que distingue mayúsculas de minúsculas) de máximo 80 caracteres

<valor> = Un valor de cualquier tipo siempre que pueda convertirse a Varchar(255)

Los namespaces

Los namespaces USER_SESSION y USER_TRANSACTION inicialmente están vacíos. El programador puede crear y poner variables en ellos con RDB$SET_CONTEXT() y recuperar esas variables con RDB$GET_CONTEXT(). El contexto de USER_SESSION está enlazado a la conexión actual. Las variables en USER_TRANSACTION solamente existen en la transacción que puso esas variables, eso significa que cuando la transacción finaliza el contexto y todas las variables definidas allí son destruídas.

Valor de retorno y comportamiento del error

Esta función devuelve 1 si la variable ya existía antes de la llamada o 0 si no existía. Para eliminar una variable del contexto, poner su valor a NULL. Si el namespace especificado no existe, ocurrirá un error. Tanto el namespace como el nombre de la variable deben ser introducidos como cadenas alfanuméricas que no sean NULL, que estén en mayúsculas y rodeadas por apóstrofos.

Ejemplos:

SELECT
   RDB$SET_CONTEXT('USER_SESSION', 'MiVariable', 2104)
FROM
   RDB$DATABASE

SELECT
   RDB$SET_CONEXT('USER_SESSION', 'TotalFilas', nCantidadFilas)
FROM
   RDB$DATABASE

SELECT
   RDB$SET_CONTEXT('USER_TRANSACTION', 'Stop', 1)
FROM
   RDB$DATABASE

Notas:

  • El máximo número de variables en un solo contexto es de 1000
  • Todas las variables de USER_TRANSACTION sobrevivirán un ROLLBACK RETAIN y un ROLLBACK TO SAVEPOINT sin cambios, no importa en cual punto durante la transacción fueron puestas
  • La función RDB$SET_CONTEXT() puede ser llamada sin asignar su resultado a una variable

En síntesis, con RDB$SET_CONTEXT() podemos tener variables que sean globales, tanto a la conexión actual como a la transacción actual. Son el equivalente a las variables de tipo PUBLIC que tienen algunos lenguajes de programación (es decir, variables que pueden ser accedidas desde cualquier módulo: programa, función, rutina o clase).

Artículo relacionado:

https://firebird21.wordpress.com/2013/04/13/rdbget_context/