类别:

:doc:`/sql-reference/functions-context`(通用)

SYS_CONTEXT(SNOWFLAKE$SESSION_ATTRIBUTES 命名空间)

返回在 SNOWFLAKE$SESSION_ATTRIBUTES 命名空间中使用 SET_SYS_CONTEXT 设置的自定义会话属性。

自定义会话属性一经设置便不可变,并在会话持续期间一直存在。它们对于跟踪有关会话的元数据非常有用,例如应用程序上下文、用户属性或审计信息。

另请参阅:

SYS_CONTEXTSET_SYS_CONTEXT

语法

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

实参

'SNOWFLAKE$SESSION_ATTRIBUTES'

指定要检索自定义会话属性。

'key'

要检索的自定义属性的名称。属性名称 区分大小写

返回

该函数会返回 VARCHAR 值:

  • 如果在当前会话中已使用 SET_SYS_CONTEXT 设置了指定属性,则返回该属性的值。

  • 如果尚未设置该属性,则返回 NULL。

访问控制要求

检索自定义会话属性不需要特殊权限。任何用户都可以从其自己的会话中检索属性。

使用说明

  • 属性必须在检索之前使用 SET_SYS_CONTEXT 进行设置。

  • 属性名称 区分大小写app_contextAPP_CONTEXT 被视为不同的属性。

  • 属性的范围限定在会话内,对其他会话不可见。

  • 如果您在 Shell 的双引号字符串中指定函数调用,请使用反斜杠 (\) 转义 $ 字符,以免 $session_attributes 被解释为 Shell 变量。

示例

以下示例设置了一个自定义属性,然后对其进行检索:

-- 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                                                    |
+---------------------------------------------------------------+

检索尚未设置的属性会返回 NULL:

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

属性名称区分大小写:

-- 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 |
+-----------+-----------+-----------+