- Categorias:
Funções de contexto (Sessão)
SET_SYS_CONTEXT¶
Define um valor para uma chave especificada em um namespace especificado que pode ser recuperado posteriormente usando SYS_CONTEXT.
Essa função tem dois modos de operação:
Atributos de sessão imutáveis (namespace
SNOWFLAKE$SESSION_ATTRIBUTES): define atributos de sessão personalizados que são imutáveis uma vez definidos e persistem durante a sessão. Útil para rastrear metadados sobre uma sessão, como contexto do aplicativo, atributos do usuário ou informações de auditoria.Variáveis de sessão (outros namespaces): comporta-se como o comando SET, definindo variáveis de sessão que podem ser atualizadas. Retorna o valor anterior da variável.
- Consulte também:
SYS_CONTEXT, SYS_CONTEXT (namespace SNOWFLAKE$SESSION_ATTRIBUTES), SET
Sintaxe¶
Argumentos¶
'namespace'O namespace no qual armazenar o par chave-valor. Namespaces compatíveis:
SNOWFLAKE$SESSION_ATTRIBUTES– armazena atributos de sessão personalizados imutáveis. Os nomes dos atributos diferenciam maiúsculas de minúsculas.Qualquer outra cadeia de caracteres (ou NULL) – trata o namespace como um prefixo para o nome de uma variável de sessão, semelhante ao comando SET. Os namespaces diferenciam maiúsculas de minúsculas.
'key'O nome do atributo ou variável a ser definido. Todos os nomes de chave diferenciam maiúsculas de minúsculas.
'value'O valor a ser designado. O valor deve ser uma cadeia de caracteres ou uma expressão que resulte em uma cadeia de caracteres.
Retornos¶
A função retorna um valor VARCHAR:
Para o namespace
SNOWFLAKE$SESSION_ATTRIBUTES: sempre retorna NULL (porque atributos imutáveis não podem ter um valor anterior). Se o atributo já tiver sido definido na sessão atual, a função vai gerar um erro.Para outros namespaces: retorna o valor anterior da variável de sessão ou NULL se a variável não existia anteriormente. Isso corresponde ao comportamento do comando SET.
Requisitos de controle de acesso¶
Não são necessários privilégios especiais para definir atributos de sessão personalizados. Qualquer usuário pode definir atributos em sua própria sessão.
Notas de uso¶
Para o namespace SNOWFLAKE$SESSION_ATTRIBUTES (atributos imutáveis):
Os atributos são imutáveis. Depois que um atributo for definido, qualquer tentativa de defini-lo novamente (mesmo com o mesmo valor) resultará em um erro.
Os nomes dos atributos diferenciam maiúsculas de minúsculas.
app_context,App_ContexteAPP_CONTEXTsão tratados como três atributos diferentes.Os atributos têm escopo de sessão. Eles persistem durante toda a sessão e não são visíveis para outras sessões.
Para recuperar os valores dos atributos, use SYS_CONTEXT (namespace SNOWFLAKE$SESSION_ATTRIBUTES):
SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', '<key>').
Para outros namespaces (variáveis de sessão):
Os nomes das variáveis **diferenciam maiúsculas de minúsculas**.
user_ideUSER_IDsão tratados como variáveis diferentes.É possível atualizar as variáveis. Definir uma variável que já existe retorna o valor anterior e a atualiza com o novo valor.
O namespace (se fornecido) é usado como prefixo:
SET_SYS_CONTEXT('myns', 'mykey', 'val')cria uma variável chamadamyns.mykey.É possível recuperar as variáveis usando
SYS_CONTEXT('<namespace>', '<key>')com as mesmas maiúsculas e minúsculas utilizadas ao definir a variável.
Notas gerais:
Se você estiver especificando a chamada da função em uma cadeia de caracteres entre aspas duplas em um shell, aplique o escape do caractere
$com uma barra invertida (\) para que$session_attributesnão seja interpretado como uma variável do shell.
Exemplos¶
Exemplo 1: Atributos de sessão imutáveis (namespace SNOWFLAKE$SESSION_ATTRIBUTES)
Defina um atributo personalizado para rastrear o contexto do aplicativo:
Recupere o valor do atributo (observação: os nomes dos atributos diferenciam maiúsculas de minúsculas):
Depois que um atributo é definido, tentar alterá-lo resulta em um erro:
Os nomes dos atributos diferenciam maiúsculas de minúsculas:
Exemplo 2: variáveis de sessão (outros namespaces)
Defina uma variável de sessão com um prefixo de namespace:
A variável é armazenada com as mesmas maiúsculas e minúsculas fornecidas: myapp.user_id. Recupere-a:
Atualize a variável (retorna o valor anterior):