1

数据库: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 的文档(通用脚本语言数据库交互),其中描述了以下内容:

a = 3
SELECT :a

但是,这会打开一个控制台,要求我输入a. 我不想在每次执行代码时都输入变量的值。我想设置一个变量并在查询的不同部分使用它,就像任何其他高级编程语言一样。

我在 JetBrains 的论坛 ( 1 , 2 ) 上发现了两个类似的问题,但没有得到解答。在 StackOverflow ( url )上找到的另一个刚刚声明 DataGrips 不支持该方言。

有谁知道如何解决这个问题?它根本不支持吗?这将真正提高我和我的团队的生产力。

先感谢您!

4

1 回答 1

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

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

  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
于 2021-08-12T09:18:41.770 回答