如何在 DataGrip(Exasol 方言)的 SQL 查询中使用变量?

How to use variables in SQL queries on DataGrip (Exasol dialect)?

数据库: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) but they are unanswered. Another one found on Whosebug (url) 上发现了两个类似的问题,只是说 DataGrips 不支持方言。

有谁知道如何解决这个问题?是不是根本不支持?这真的会提高我和我的团队的工作效率。

提前致谢!

花了一些时间,我发现这是不可能的。相反,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 输出此查询的 table 结果。关键字 exit() 类似于 print() 方法。最后,我不知道为什么需要将函数参数分配给局部变量,然后需要将其分配给查询中的另一个变量。这对我来说毫无意义,但我无法让它工作。

在我的示例中,我将脚本参数 p_country 分配给本地参数 param_c,然后将其分配给查询参数 local_c.

您可以在以下位置找到文档:

  1. https://docs.exasol.com/database_concepts/scripting/general_script_language.htm?Highlight=for%20loop
  2. https://docs.exasol.com/database_concepts/scripting/db_interaction.htm