如何在 DataGrip(Exasol 方言)上的 SQL 查询中使用变量?
Posted
技术标签:
【中文标题】如何在 DataGrip(Exasol 方言)上的 SQL 查询中使用变量?【英文标题】:How to use variables in SQL queries on DataGrip (Exasol dialect)? 【发布时间】:2021-07-20 13:56:50 【问题描述】:数据库:EXASOL
IDE:IntelliJ DataGrip
我试图在 SQL 中声明变量并在整个查询过程中调用它们。 这是 Microsoft SQL Server 中的等价物:
DECLARE @var AS INT = 3
SELECT @var AS var
-- Use case example:
SELECT * FROM table1 WHERE column_value = @var
这在 DataGrip 和 Exasol 中是否可行?我搜索了 Exasol 的文档(General Script Language、Database Interaction),其中描述了以下内容:
a = 3
SELECT :a
但是,这会打开一个控制台,要求我输入a
的值。我不想在每次执行代码时都输入变量的值。我想设置一个变量并在查询的不同部分使用它,就像任何其他高级编程语言一样。
我在 JetBrains 的论坛(1、2)上发现了两个类似的问题,但没有得到解答。在 *** (url) 上发现的另一个人刚刚表示 DataGrips 不支持该方言。
有谁知道如何解决这个问题?它根本不支持吗?这确实会提高我和我的团队的工作效率。
提前谢谢你!
【问题讨论】:
据我所知,是数据库本身的限制:***.com/questions/53959257/… 【参考方案1】:花了一些时间后,我发现这是不可能的。相反,Exasol 允许 LUA
脚本运行此类计算。您将在下面找到一个示例:
CREATE LUA SCRIPT "TEST" (p_country) RETURNS TABLE AS
local param_c = p_country
exit(
query(
[[
SELECT * FROM SCHEMA_NAME.TABLE_NAME
WHERE SK_COUNTRY = :local_c;
]]
,local_c=param_c
)
);
/
EXECUTE SCRIPT SCHEMA_NAME.TEST('DE');
在此示例中,关键字RETURNS TABLE
输出此查询的表结果。关键字exit()
类似于print()
方法。最后,我不知道为什么,但是函数参数需要分配给一个局部变量,然后需要将其分配给查询中的另一个变量。这对我来说毫无意义,但我无法让它工作。
在我的示例中,我将脚本参数 p_country
分配给本地参数 param_c
,然后将其分配给查询参数 local_c
。
您可以在以下位置找到文档:
-
https://docs.exasol.com/database_concepts/scripting/general_script_language.htm?Highlight=for%20loop
https://docs.exasol.com/database_concepts/scripting/db_interaction.htm
【讨论】:
以上是关于如何在 DataGrip(Exasol 方言)上的 SQL 查询中使用变量?的主要内容,如果未能解决你的问题,请参考以下文章