提问人:NCFY 提问时间:9/28/2023 更新时间:9/29/2023 访问量:49
IN() 语句的 ARRAY 变量上 UNNEST 的必要性
Necessity of UNNEST on ARRAY variable for IN() statement
问:
如果一直忙于寻找使用 ARRAY 变量定义
WHERE [...] IN()
HANA SQL 中的语句。当我使用 ARRAY 时,它起作用;所有其他方法都失败了。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;
答:
2赞
Zufar Sunagatov
9/29/2023
#1
我试图理解为什么。任何帮助都非常感谢。
在第一个示例中,直接在语句中使用数组变量。这是行不通的,因为子句中不允许使用数组。variable1
IN()
WHERE
在第二个示例中,使用该函数将数组变量转换为表。然后,使用 statement 从表中选择列并将其传递给 ) 语句。它的工作原理是运算符现在正在接收标量值列表。UNNEST()
variable1
SELECT
VAR1
IN(
IN()
评论
0赞
NCFY
9/29/2023
好;因此,不可能在 where 子句中引用/使用数组。将数组转换为表,然后选择列是正确的方法,还是有更好的方法?
0赞
Zufar Sunagatov
9/29/2023
@NCFY 是的,您可以创建一个临时表来存储数组变量的值。然后,可以在 .WHERE IN()
0赞
NCFY
9/29/2023
这是 HANA SQL 的局限性吗?还是其他 DBMS 具有相同的约束?我只是无法在网上挖掘具体信息......可能使用了不正确的搜索词。感谢您的支持!
1赞
Zufar Sunagatov
9/29/2023
@NCFY 是的,没错。无法在子句中直接使用数组变量是 HANA SQL 的限制。其他 DBMS(如 PostgreSQL 和 MySQL)允许您直接在子句中使用数组变量。WHERE IN()
WHERE IN()
0赞
NCFY
9/29/2023
我刚刚检查了本地 Postgres,id 也不接受数组。我会进一步调查,但无论如何,到目前为止谢谢你。
评论