2017-05-09 86 views
1

在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" 

回答

0

你真的不能设置在EXASOL会话参数,来实现类似的东西的唯一方法是存储在表中需要像结构中的值:

SESSION_ID KEY  VALUE READ_ONLY 
8347387  filter asd  1 

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

+0

感谢您的输入,这已经完成。这种方法的问题(因为它在原来的文章中)是记录不被维护,我找不到方法来检测会话是否终止 - >我不能删除记录,除非我有另一个脚本计划运行定期做一些GC工作。 – Pred

+0

是的,这是与Exasol一起走的路,我不得不做类似的事情。根据我的经验,Exasol是一个非常普通的数据库,它没有什么特别的功能,它很好地完成了它们,但它并没有配备完整的工具或功能,如Oracle或SQL Server。我认为最好的解决方案是用Exasol将数据库层以外的复杂逻辑带入Exasol,通常用PL-SQL或TSQL完成的工作应该移到Exasol之外,或者你有Lua ...... – mucio

+0

呃...我接受这个答案,因为这是我在这个主题中发现的更多研究的唯一解决方案。 – Pred

0

我觉得你可以达到你需要使用内Exasol的脚本功能是什么 - 看在用户手册的第3.5节..

您也可以通过处理一个shell脚本

参数化“外部”
+0

感谢您的评论,我已经看到它。我的问题不是检查值或类似的东西,而只是为当前会话存储它们,并在会话终止时删除它们。 LUA中的变量范围仅限于它所定义的函数,因此我无法在视图中使用该变量。修复我,如果我错了。 – Pred