在SQL Server(2016)中,我们有SESSION_CONTEXT()和sp_set_session_context来检索/存储键值存储中的自定义变量。这些值仅在会话中可用,其生存期在会话终止时结束。(或者在早期版本中,好的旧CONTEXT_INFO将一些数据存储在变量中)。
我正在 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"
您不能真正在 EXASOL 中设置会话参数,实现类似目标的唯一方法是将所需的值存储在具有如下结构的表中:
SESSION_ID KEY VALUE READ_ONLY
8347387 filter asd 1
使用 LUA,您可以创建一个脚本,以便更轻松地管理这些"会话"变量。
我认为您可以通过使用 Exasol 中的脚本功能来实现您需要的东西 - 请参阅用户手册中的 3.5 节。
您还可以通过 shell 脚本"外部"处理参数化