- カテゴリ:
コンテキスト関数 (セッション)
SET_SYS_CONTEXT¶
:doc:`sys_context`を使用して後で取得できる、指定された名前空間の指定されたキーの値を設定します。
この関数には、2つの操作モードがあります。
**不変のセッション属性**(``SNOWFLAKE$SESSION_ATTRIBUTES``名前空間):一度設定されると不変であり、セッションの間保持されるカスタムセッション属性を設定します。アプリケーションコンテキスト、ユーザー属性、監査情報など、セッションに関するメタデータを追跡するのに役立ちます。
**セッション変数**(その他の名前空間)::doc:`SET </sql-reference/sql/set>`コマンドのように動作し、更新可能なセッション変数を設定します。変数の以前の値を返します。
- こちらもご参照ください。
SYS_CONTEXT、 SYS_CONTEXT(SNOWFLAKE$SESSION_ATTRIBUTES 名前空間)、 SET
構文¶
引数¶
'namespace'キーと値のペアを格納する名前空間。サポートされている名前空間:
SNOWFLAKE$SESSION_ATTRIBUTES- 不変のカスタムセッション属性を保存します。属性名は**大文字と小文字を区別**します。その他の文字列(またはNULL) - :doc:`SET </sql-reference/sql/set>`コマンドと同様に、名前空間をセッション変数名のプレフィックスとして扱います。名前空間では**大文字と小文字が区別されます**。
'key'設定する属性または変数の名前。すべてのキーの名前では、大文字と小文字が区別されます。
'value'割り当てる値。値は、文字列または文字列に評価される式である必要があります。
戻り値¶
この関数は VARCHAR 値を返します。
アクセス制御の要件¶
カスタムセッション属性を設定するために、特別な権限は必要ありません。いずれのユーザーも自分のセッションで属性を設定できます。
使用上の注意¶
SNOWFLAKE$SESSION_ATTRIBUTES名前空間(不変の属性)の場合:
属性は**不変**です。一度属性が設定された場合、(同じ値であっても)再度設定を試行するとエラーになります。
属性名は大文字と小文字を区別します。
app_context、App_Context、および``APP_CONTEXT``は3つの異なる属性として扱われます。属性は**セッションスコープ**です。これらはセッション中ずっと表示され、他のセッションからは見えません。
属性値を取得するには、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名前空間)
アプリケーションコンテキストを追跡するカスタム属性を設定します。
属性値を取得します(注:属性名は大文字と小文字を区別します)。
属性が設定され、その変更を試行するとエラーになります。
属性名は大文字と小文字を区別します。
例2:セッション変数(その他の名前空間)
名前空間プレフィックス付きのセッション変数を設定します。
変数は、指定されたとおりの大文字小文字で格納されます:myapp.user_id。取得する:
変数を更新します(以前の値を返します)。