在SQL Server(2016)中,我们有SESSION_CONTEXT()和sp_set_session_context来检索/存储键值存储中的自定义变量。这些值仅在会话中可用,并且它们的生命周期在会话终止时结束。 (或者在早期版本中,旧的CONTEXT_INFO将一些数据存储在varbinary中。
我正在寻找EXASol(6.0)中的类似解决方案。
显而易见的一种方法是创建一个表并在那里存储此信息,但是这需要预定的清理脚本,并且比内置解决方案更容易出错。这是后备计划,但我想确定没有其他选择。
另一种选择可能是在数据库中创建单个用户并对其进行配置,但仅仅因为要添加的用户数量,这被排除了。
用例如下:应用程序有多个用户,每个用户都有一些值要在每个查询中使用。该应用程序只能访问某些视图。
这在SQL Server中运行得非常好,但是我们想要测试EXASol作为具有相同功能的替代方案。
我在EXASol Manual中找不到任何相关内容,但有可能,我错过了一些内容。
以下是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"
答案 0 :(得分:0)
我认为您可以通过使用Exasol中的脚本功能实现您的需求 - 请参阅用户手册中的第3.5节。
您还可以在外部处理参数化'通过shell脚本
答案 1 :(得分:0)
您无法在EXASOL中真正设置会话参数,实现类似功能的唯一方法是在表格中存储您需要的值,其结构如下:
SESSION_ID KEY VALUE READ_ONLY
8347387 filter asd 1
使用LUA,您可以创建一个脚本,使您更容易管理这些“会话”变量。