【问题标题】:EXASol set a custom session variableEXAsol 设置自定义会话变量
【发布时间】:2017-05-09 08:34:11
【问题描述】:

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

【问题讨论】:

    标签: sql session exasolution


    【解决方案1】:

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

    SESSION_ID   KEY     VALUE   READ_ONLY
    8347387      filter  asd     1
    

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

    【讨论】:

    • 感谢您的输入,这已经完成了。我对这种方法的问题(就像在原始帖子中一样)是没有维护记录,我找不到检测会话是否终止的方法 -> 我无法删除记录,除非我有另一个脚本计划运行定期做一些 GC 工作。
    • 是的,这就是使用 Exasol 的方式,我必须做类似的事情。根据我的经验,Exasol 是一个非常简单的数据库,它做的事情很少,而且做得很好,但它没有像 Oracle 或 SQL Server 那样提供全套工具或功能。我认为最好的解决方案是用 Exasol 将复杂的逻辑带到 DB 层之外,通常用 PL-SQL 或 TSQL 完成的事情应该移到 Exasol 之外,或者你有 Lua...
    • 嗯...我接受这个答案,因为这是我在这个主题的更多研究中找到的唯一解决方案。
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的评论,我已经看到了。我的问题不是检查值或类似的东西,而是只为当前会话存储它们,并在会话终止时删除它们。 LUA 中的变量范围仅限于它定义的函数,因此我不能在视图中使用该变量。如果我错了,请纠正我。
    猜你喜欢
    • 1970-01-01
    • 2015-04-21
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    相关资源
    最近更新 更多