- Catégories :
Fonctions contextuelles (Session)
SET_SYS_CONTEXT¶
Définit une valeur pour une clé spécifiée dans un espace de noms spécifié qui peut être récupérée ultérieurement en utilisant SYS_CONTEXT.
La fonction a deux modes de fonctionnement :
Attributs de session immuables (espace de nom
SNOWFLAKE$SESSION_ATTRIBUTES) : définit des attributs de session personnalisés qui sont immuables une fois définis et persistent pendant la durée de la session. Utile 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.Variables de session (autres espaces de noms) : Se comporte comme la commande SET, en définissant des variables de session qui peuvent être mises à jour. Renvoie la valeur précédente de la variable.
Syntaxe¶
Arguments¶
'namespace'L’espace de noms dans lequel stocker la paire clé-valeur. Espaces de noms pris en charge :
SNOWFLAKE$SESSION_ATTRIBUTES- Stocke les attributs de session personnalisés immuables. Les noms d’attribut sont sensibles à la casse.Toute autre chaîne (ouNULL ) - Traite l’espace de noms comme un préfixe pour un nom de variable de session, similaire à la commande SET. Les espaces de noms sont sensibles à la casse.
'key'Le nom de l’attribut ou de la variable à définir. Tous les noms de clé sont sensibles à la casse.
'value'La valeur à attribuer. La valeur doit être une chaîne ou expression dont le résultat est une chaîne.
Renvoie¶
La fonction renvoie une valeur VARCHAR :
Pour l’espace de noms
SNOWFLAKE$SESSION_ATTRIBUTES: Renvoie toujours NULL (car les attributs immuables ne peuvent pas avoir une valeur précédente). Si l’attribut a déjà été défini dans la session en cours, la fonction signale une erreur à la place.Pour les autres espaces de noms : Renvoie la valeur précédente de la variable de session, ou NULL si la variable n’existait pas auparavant. Cela correspond au comportement de la commande SET.
Exigences en matière de contrôle d’accès¶
Aucun privilège particulier n’est requis pour définir des attributs de session personnalisés. Tout utilisateur peut définir des attributs dans sa propre session.
Notes sur l’utilisation¶
Pour l’espace de noms SNOWFLAKE $SESSION_ATTRIBUTES (attributs immuables) :
Les attributs sont immuables. Une fois qu’un attribut est défini, toute tentative de le définir à nouveau (même à la même valeur) entraînera une erreur.
Les noms d’attributs sont sensibles à la casse.``app_context``,
App_ContextetAPP_CONTEXTsont traités comme trois attributs différents.Les attributs sont spécifiques à la session. Ils persistent pendant la durée de la session et ne sont pas visibles pour les autres sessions.
Pour récupérer les valeurs d’attribut, utilisez:doc:
sys_context_snowflake_session_attributes:SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', '<key>').
Pour les autres espaces de noms (variables de session) :
Les noms de variable sont sensibles à la casse. les variables
user_idet``USER_ID`` sont traitées comme des variables différentes.Les variables peuvent être mises à jour. La définition d’une variable qui existe déjà renvoie la valeur précédente et la met à jour avec la nouvelle valeur.
L’espace de noms (s’il est fourni) est utilisé comme préfixe :
SET_SYS_CONTEXT('myns', 'mykey', 'val')crée une variable nomméemyns.mykey.Les variables peuvent être récupérées en utilisant``SYS_CONTEXT(“<namespace>”, “<key>”)`` avec la casse exacte utilisée lors de la définition de la variable.
Notes générales :
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_attributesne soit pas interprété comme une variable de shell.
Exemples¶
Exemple 1 : Attributs de session immuables (espace de noms SNOWFLAKE $SESSION_ATTRIBUTES)
Définissez un attribut personnalisé pour suivre le contexte de l’application :
Récupérez la valeur d’attribut (remarque : les noms d’attributs sont sensibles à la casse) :
Une fois qu’un attribut est défini, la tentative de le modifier entraîne une erreur :
Les noms d’attribut sont sensibles à la casse.
Exemple 2 : variables de session (autres espaces de noms)
Définir une variable de session avec un préfixe d’espace de noms :
La variable est stockée avec la casse exacte fournie : myapp.user_id. Récupérer celle-ci :
Mettre à jour la variable (renvoie la valeur précédente) :