2

在 SQL Server (2016) 中,我们使用SESSION_CONTEXT()sp_set_session_context在键值存储中检索/存储自定义变量。这些值仅在会话中可用,并且它们的生命周期在会话终止时结束。(或者在早期版本中,旧的CONTEXT_INFO将一些数据存储在 varbinary 中)。

我正在 EXASol (6.0) 中寻找类似的解决方案。

一个明显的方法是创建一个表并将此信息存储在那里,但这需要预定的清理脚本并且比内置解决方案更容易出错。这是后备计划,但我想确定没有其他选择。

另一种选择可能是在数据库中创建单个用户并对其进行配置,但仅仅因为要添加的用户数量,这被排除在外。

用例如下:一个应用程序有几个用户,每个用户都有一些值要在每个查询中使用。该应用程序只能访问某些视图。

这在 SQL Server 中非常有效,但我们想测试 EXASol 作为具有相同功能的替代方案。

我在EXASol 手册中找不到任何相关内容,但有可能是我错过了一些东西。

这是 SQL Server 2016 中的简化示例代码

sp_set_session_context @key='filter', @value='asd', @read_only=1;

CREATE VIEW FilteredMyTable AS
SELECT Col1, Col2, Col3 FROM MyTable
WHERE MyFilterCol = CONVERT(VARCHAR(32), SESSION_CONTEXT('filter'))

我尝试了一个明显不可行的解决方案,只是为了测试它是否有效(它没有)。

ALTER SESSION SET X_MY_CUSTOM_FILTER = "asd"
4

2 回答 2

0

您不能真正在 EXASOL 中设置会话参数,实现类似功能的唯一方法是将所需的值存储在具有如下结构的表中:

SESSION_ID   KEY     VALUE   READ_ONLY
8347387      filter  asd     1

使用 LUA,您可以创建一个脚本,让您更轻松地管理这些“会话”变量。

于 2017-05-10T14:36:38.447 回答
0

我认为您可以通过使用 Exasol 中的脚本功能来实现您所需要的 - 请参阅用户手册中的第 3.5 节。

您还可以通过 shell 脚本“从外部”处理参数化

于 2017-05-10T08:42:46.793 回答