FirebirdSQL logo

RDB$SET_CONTEXT()

Disponible en

DSQL, PSQL

Syntaxe
RDB$SET_CONTEXT('<namespace>', 'varname', {<value> | NULL})

<namespace> ::= USER_SESSION | USER_TRANSACTION
Table 1. paramètres de fonction RDB$SET_CONTEXT
Paramètre Description

namespace

Namespace.

varname

Nom de la variable, sensible à la casse. Longueur maximale de 80 octets.

value

Données de tout type, à condition qu’elles puissent être converties en CHARACTER SET NONE de type VARCHAR(255).

Type de résultat de retour

INTEGER

La fonction RDB$SET_CONTEXT crée, définit ou efface une variable dans l’un des espaces de noms utilisés par l’utilisateur : USER_SESSION ou USER_TRANSACTION.

La fonction renvoie 1 si la variable existait déjà avant l’appel et 0 si ce n’est pas le cas. Pour supprimer une variable, mettez-la à NULL. Si l’espace de noms donné n’existe pas, la fonction renverra une erreur. L’espace de noms et le nom de la variable sont sensibles à la casse, doivent être des chaînes de caractères non vides, et entourées de guillemets.

Note
  • L’espace de nom SYSTEM est en lecture seule ;

  • Le nombre maximum de variables dans une connexion (pour l’espace USER_SESSION) ou une transaction (pour l’espace USER_TRANSACTION) est de 1000 ;

  • Toutes les variables de l’espace de nom USER_TRANSACTION sont sauvegardées lorsque ROLLBACK RETAIN ou ROLLBACK TO SAVEPOINT, indépendamment de l’endroit où elles sont définies au moment de la transaction.

Example 1. Utilisation de la fonction RDB$SET_CONTEXT
SELECT RDB$SET_CONTEXT ('USER_SESSION', 'DEBUGL', 3)
FROM RDB$DATABASE;

-- la syntaxe suivante est disponible dans PSQL
RDB$SET_CONTEXT('USER_SESSION', 'RECORDSFOUND', RECCOUNTER);

SELECT RDB$SET_CONTEXT ('USER_TRANSACTION', 'SAVEPOINTS', 'YES')
FROM RDB$DATABASE;
Example 2. Utilisation de fonctions pour travailler avec des variables contextuelles
SET TERM ^;
CREATE PROCEDURE set_context(User_ID VARCHAR(40),
                             Trn_ID INT) AS
BEGIN
  RDB$SET_CONTEXT('USER_TRANSACTION', 'Trn_ID', Trn_ID);
  RDB$SET_CONTEXT('USER_TRANSACTION', 'User_ID', User_ID);
END^
SET TERM ;^

CREATE TABLE journal (
   jrn_id INTEGER NOT NULL PRIMARY KEY,
   jrn_lastuser VARCHAR(40),
   jrn_lastaddr VARCHAR(255),
   jrn_lasttran INTEGER
);

SET TERM ^;
CREATE TRIGGER UI_JOURNAL
FOR JOURNAL BEFORE INSERT OR UPDATE
AS
BEGIN
  new.jrn_lastuser = RDB$GET_CONTEXT('USER_TRANSACTION',
                                     'User_ID');
  new.jrn_lastaddr = RDB$GET_CONTEXT('SYSTEM',
                                     'CLIENT_ADDRESS');
  new.jrn_lasttran = RDB$GET_CONTEXT('USER_TRANSACTION',
                                         'Trn_ID');
END^
SET TERM ;^

EXECUTE PROCEDURE set_context('skidder', 1);

INSERT INTO journal(jrn_id) VALUES(0);

COMMIT;
Voir aussi :

RDB$GET_CONTEXT.

Fonctions pour traiter les UUID