SET_SYS_CONTEXT

SET_SYS_CONTEXT (컨텍스트 값 설정)

지정된 네임스페이스의 지정된 키에 값을 설정하며, 나중에 SYS_CONTEXT로 검색할 수 있어요.

이 함수는 두 가지 작동 모드가 있어요:

  • 불변 세션 속성(SNOWFLAKE$SESSION_ATTRIBUTES 네임스페이스): 한 번 설정하면 불변인 사용자 지정 세션 속성을 설정해요. 세션 기간 동안 지속돼요. 애플리케이션 컨텍스트, 사용자 속성, 감사 정보 같은 세션의 메타데이터를 추적하는 데 유용해요.
  • 세션 변수(다른 네임스페이스): SET 명령처럼 작동하며, 업데이트할 수 있는 세션 변수를 설정해요. 변수의 이전 값을 반환해요.

참조: SYS_CONTEXT, SYS_CONTEXT (SNOWFLAKE$SESSION_ATTRIBUTES 네임스페이스), SET

출처: Snowflake SQL Reference - SET_SYS_CONTEXT

본문

구문

CALL SET_SYS_CONTEXT( '<namespace>', '<key>', '<value>' )

인자

''

키-값 쌍을 저장할 네임스페이스예요. 지원되는 네임스페이스:

  • SNOWFLAKE$SESSION_ATTRIBUTES — 불변인 사용자 지정 세션 속성을 저장해요. 속성 이름은 대소문자를 구분해요.
  • 기타 다른 문자열(또는 NULL) — 네임스페이스를 세션 변수 이름의 접두사로 취급해요(SET 명령과 유사). 네임스페이스는 대소문자를 구분해요.

''

설정할 속성 또는 변수의 이름이에요. 모든 키 이름은 대소문자를 구분해요.

''

할당할 값이에요. 값은 문자열이거나 문자열로 평가되는 표현식이어야 해요.

반환 값

이 함수는 VARCHAR 값을 반환해요:

  • SNOWFLAKE$SESSION_ATTRIBUTES 네임스페이스의 경우: 항상 NULL을 반환해요(불변 속성은 이전 값을 가질 수 없기 때문). 현재 세션에서 속성이 이미 설정되었으면 함수는 대신 오류를 발생시켜요.
  • 다른 네임스페이스의 경우: 세션 변수의 이전 값을 반환하거나, 변수가 이전에 존재하지 않았으면 NULL을 반환해요. 이는 SET 명령의 동작과 일치해요.

2026_06 동작 변경 번들

계정에서 2026_06 동작 변경 번들이 활성화되면 SYS_CONTEXT를 통한 읽기의 반환 타입이 변경돼요. SET_SYS_CONTEXT의 반환 값(속성 또는 세션 변수의 이전 값)은 영향을 받지 않고 계속 VARCHAR예요.

접근 제어 요구 사항

사용자 지정 세션 속성을 설정하는 데 특별한 권한은 필요하지 않아요. 모든 사용자가 자신의 세션에서 속성을 설정할 수 있어요.

사용상 주의사항

SNOWFLAKE$SESSION_ATTRIBUTES 네임스페이스(불변 속성):

  • 속성은 불변이에요. 속성이 한 번 설정되면 다시 설정하려는 시도는(같은 값으로도) 오류를 초래해요.
  • 속성 이름은 대소문자를 구분해요. app_context, App_Context, APP_CONTEXT는 서로 다른 세 속성으로 취급돼요.
  • 속성은 세션 범위예요. 세션 기간 동안 지속되며 다른 세션에서는 보이지 않아요.
  • 속성 값을 검색하려면 SYS_CONTEXT(SNOWFLAKE$SESSION_ATTRIBUTES 네임스페이스)를 사용해요: SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', '<key>').

다른 네임스페이스(세션 변수):

  • 변수 이름은 대소문자를 구분해요. user_id와 USER_ID는 서로 다른 변수로 취급돼요.
  • 변수는 업데이트할 수 있어요. 이미 존재하는 변수를 설정하면 이전 값을 반환하고 새 값으로 업데이트해요.
  • 네임스페이스(제공된 경우)는 접두사로 사용돼요: SET_SYS_CONTEXT('myns', 'mykey', 'val')은 myns.mykey라는 변수를 만들어요.
  • 변수는 설정할 때 사용한 정확한 대소문자로 SYS_CONTEXT('<namespace>', '<key>')를 사용해 검색할 수 있어요.

일반 참고 사항:

  • 셸에서 큰따옴표로 묶인 문자열에 함수 호출을 지정하는 경우 $ 문자를 백슬래시(\)로 이스케이프해 $session_attributes가 셸 변수로 해석되지 않도록 해요.

예시

예시 1: 불변 세션 속성(SNOWFLAKE$SESSION_ATTRIBUTES 네임스페이스)

애플리케이션 컨텍스트를 추적하는 사용자 지정 속성 설정:

CALL SET_SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'app_context', 'production');

속성 값 검색(속성 이름은 대소문자를 구분함):

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'app_context');
+---------------------------------------------------------------+
| SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'app_context')   |
|---------------------------------------------------------------|
| production                                                    |
+---------------------------------------------------------------+

속성이 한 번 설정되면 변경 시도는 오류를 초래해요:

-- This will fail because the attribute is immutable

CALL SET_SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'app_context', 'development');
SQL compilation error: Cannot overwrite context value: app_context

속성 이름은 대소문자를 구분해요:

-- This succeeds because it's a different attribute name (different case)

CALL SET_SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'APP_CONTEXT', 'staging');

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'app_context') AS lower_case,
       SYS_CONTEXT('SNOWFLAKE$SESSION_ATTRIBUTES', 'APP_CONTEXT') AS upper_case;
+------------+------------+
| LOWER_CASE | UPPER_CASE |
|------------+------------|
| production | staging    |
+------------+------------+

예시 2: 세션 변수(다른 네임스페이스)

네임스페이스 접두사로 세션 변수 설정:

CALL SET_SYS_CONTEXT('myapp', 'user_id', '12345');
+---------------------------------------------------+
| SET_SYS_CONTEXT('myapp', 'user_id', '12345')     |
|---------------------------------------------------|
| NULL                                              |
+---------------------------------------------------+

변수는 제공된 정확한 대소문자로 저장돼요: myapp.user_id. 검색해보기:

SELECT SYS_CONTEXT('myapp', 'user_id');
+----------------------------------+
| SYS_CONTEXT('myapp', 'user_id')  |
|----------------------------------|
| 12345                            |
+----------------------------------+

변수 업데이트(이전 값을 반환함):

CALL SET_SYS_CONTEXT('myapp', 'user_id', '67890');
+---------------------------------------------------+
| SET_SYS_CONTEXT('myapp', 'user_id', '67890')     |
|---------------------------------------------------|
| 12345                                             |
+---------------------------------------------------+

더 알아보기