IN() 语句的 ARRAY 变量上 UNNEST 的必要性

问题描述 投票:0回答:1

如果一直忙于寻找使用 ARRAY 变量来定义 a 内容的解决方案

WHERE [...] IN()

HANA SQL 中的语句。当我

UNNEST()
数组时它起作用;所有其他方法都失败了。

我试图理解为什么。非常感谢任何帮助。

这行不通

CREATE PROCEDURE UPDATE_TABLE()

AS
BEGIN
    -- Define default filter values
    DECLARE variable1 NVARCHAR(255) ARRAY = ARRAY('default_value1','default_value2');

    -- Update the specified columns for matching rows
    UPDATE TABLE
    SET
        COLUMN = '1'
    WHERE
        COLUMN IN (:variable1);
END;

这确实有效

CREATE PROCEDURE UPDATE_TABLE()

AS
BEGIN
    -- Define default filter values
    DECLARE variable1 NVARCHAR(255) ARRAY = ARRAY('default_value1','default_value2');

    -- Create table for ARRAY variable(s)
    variable1_table = UNNEST(:variable1) AS ("VAR1"); 

    -- Update the specified columns for matching rows
    UPDATE TABLE
    SET
        COLUMN = '1'
    WHERE
        COLUMN IN (SELECT "VAR1" FROM :variable1_table);
END;
sql variables hana
1个回答
0
投票

我试图理解其中的原因。非常感谢任何帮助。

在第一个示例中,您直接在

variable1
语句中使用数组变量
IN()
。这不起作用,因为
WHERE
子句中不允许使用数组。

在第二个示例中,您使用

UNNEST()
函数将数组变量
variable1
转换为表。然后使用
SELECT
语句从表中选择
VAR1
列并将其传递给
IN(
) 语句。它的工作原理是
IN()
运算符现在正在接收标量值列表。

© www.soinside.com 2019 - 2024. All rights reserved.