Catégories :

Fonctions contextuelles (général)

SYS_CONTEXT (espace de noms SNOWFLAKE$SESSION_ATTRIBUTES)

Renvoie un attribut de session personnalisé défini à l’aide de SET_SYS_CONTEXT dans l’espace de noms SNOWFLAKE$SESSION_ATTRIBUTES.

Les attributs de session personnalisés sont immuables une fois définis et persistent pendant la durée de la session. Ils sont utiles pour suivre les métadonnées d’une session, telles que le contexte de l’application, les attributs de l’utilisateur ou les informations d’audit.

Voir aussi :

SYS_CONTEXT, SET_SYS_CONTEXT

Syntaxe

SYS_CONTEXT(
  'SNOWFLAKE$SESSION_ATTRIBUTES' ,
  '<key>'
)

Arguments

'SNOWFLAKE$SESSION_ATTRIBUTES'

Spécifie que vous souhaitez récupérer un attribut de session personnalisé.

'key'

Le nom de l’attribut personnalisé à récupérer. Les noms d’attributs sont sensibles à la casse.

Renvoie

La fonction renvoie une valeur VARCHAR :

  • La valeur de l’attribut spécifié s’il a été défini dans la session en cours à l’aide de SET_SYS_CONTEXT.

  • NULL si l’attribut n’a pas été défini.

Exigences en matière de contrôle d’accès

Aucun privilège particulier n’est requis pour récupérer des attributs de session personnalisés. Tout utilisateur peut récupérer des attributs à partir de sa propre session.

Notes sur l’utilisation

  • Les attributs doivent être définis à l’aide de SET_SYS_CONTEXT avant de pouvoir les récupérer.

  • Les noms d’attributs sont sensibles à la casse. app_context et APP_CONTEXT sont traités comme des attributs différents.

  • Les attributs sont limités à la session et ne sont pas visibles par les autres sessions.

  • Si vous spécifiez l’appel de fonction dans une chaîne entre guillemets doubles dans un shell, isolez le caractère $ avec une barre oblique inverse (\) de sorte que $session_attributes ne soit pas interprété comme une variable de shell.

Exemples

L’exemple suivant définit un attribut personnalisé, puis le récupère :

-- Set a custom session attribute
CALL SET_SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'app_context', 'production');

-- Retrieve the custom attribute
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'app_context');
+---------------------------------------------------------------+
| SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'app_context')   |
|---------------------------------------------------------------|
| production                                                    |
+---------------------------------------------------------------+

La récupération d’un attribut qui n’a pas été défini renvoie NULL :

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'nonexistent_attr');
+------------------------------------------------------------------+
| SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'nonexistent_attr') |
|------------------------------------------------------------------|
| NULL                                                             |
+------------------------------------------------------------------+

Les noms d’attributs sont sensibles à la casse :

-- Set attributes with different cases
CALL SET_SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'mykey', 'lowercase');
CALL SET_SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'MyKey', 'mixedcase');
CALL SET_SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'MYKEY', 'uppercase');

-- Each is a distinct attribute
SELECT
  SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'mykey') AS lower,
  SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'MyKey') AS mixed,
  SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'MYKEY') AS upper;
+-----------+-----------+-----------+
| LOWER     | MIXED     | UPPER     |
|-----------+-----------+-----------|
| lowercase | mixedcase | uppercase |
+-----------+-----------+-----------+