在SQL Server(2016)中,我们有SESSION_CONTEXT()和sp_set_session_context在键值存储中检索/存储自定义变量。这些值仅在会话中可用,并且在会话终止时其寿命结束。 (或者在较早的版本中,旧的CONTEXT_INFO将一些数据存储在varbinary中)。EXASol设置自定义会话变量
我正在寻找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"
感谢您的输入,这已经完成。这种方法的问题(因为它在原来的文章中)是记录不被维护,我找不到方法来检测会话是否终止 - >我不能删除记录,除非我有另一个脚本计划运行定期做一些GC工作。 – Pred
是的,这是与Exasol一起走的路,我不得不做类似的事情。根据我的经验,Exasol是一个非常普通的数据库,它没有什么特别的功能,它很好地完成了它们,但它并没有配备完整的工具或功能,如Oracle或SQL Server。我认为最好的解决方案是用Exasol将数据库层以外的复杂逻辑带入Exasol,通常用PL-SQL或TSQL完成的工作应该移到Exasol之外,或者你有Lua ...... – mucio
呃...我接受这个答案,因为这是我在这个主题中发现的更多研究的唯一解决方案。 – Pred