我正在尝试添加一个声明的变量来替换“ where in”子句中的值的硬编码列表。研究Hana如何处理数组变量,似乎可以做到这一点,方法是声明一个数组,然后直接在其上使用选择,或者先将其取消嵌套到表中,但我不断遇到无法解决的错误。
当我这样尝试时:
DO
BEGIN
DECLARE CODES_ARRAY NVARCHAR(100) ARRAY = ARRAY('01','02','03','04');
SELECT T0."ItemCode"
FROM OITM T0
INNER JOIN OITW T1 ON T0."ItemCode" = T1."ItemCode"
WHERE "WhsCode" IN (SELECT "code" FROM :CODES_ARRAY);
END;
我收到此错误消息sql syntax error: incorrect syntax near ")": line 9 col 54 (at pos 239)
我不知道什么是语法错误解决方案。
因此,我尝试像这样插入声明的表变量:
DO
BEGIN
DECLARE CODES_ARRAY NVARCHAR(100) ARRAY = ARRAY('01','02','03','04');
DECLARE CODES_TABLE TABLE = UNNEST(:CODES_ARRAY) AS ("code");
SELECT T0."ItemCode"
FROM OITM T0
INNER JOIN OITW T1 ON T0."ItemCode" = T1."ItemCode"
WHERE "WhsCode" IN (SELECT "code" FROM CODES_TABLE);
END;
并且我收到此错误消息:identifier must be declared: 1: line 5 col 38 (at pos 123)
据我所知,数组变量已正确声明,所以我不知道如何解决该错误。
我已经一遍又遍地阅读SAP Hana SQL参考文档(有关数组/表变量,嵌套函数等),似乎我已经正确设置了所有内容,但无法弄清楚这些错误。我希望能够在可能的情况下在不同的时间使用这两种方法(“数组变量到表变量”和“仅数组变量”方法)
是,您已经正确完成了所有操作,除了一件小事:
要在SQLScript中引用变量(以便访问其值),必须在变量名前加一个冒号:
。
有了这个小小的改动,您的代码就可以工作了:
DO
BEGIN
DECLARE CODES_ARRAY NVARCHAR(100) ARRAY = ARRAY('01','02','03','04');
DECLARE CODES_TABLE TABLE = UNNEST(:CODES_ARRAY) AS ("code");
SELECT
T0."ItemCode"
FROM
OITM T0
INNER JOIN OITW T1
ON T0."ItemCode" = T1."ItemCode"
WHERE
"WhsCode" IN (SELECT "code" FROM :CODES_TABLE);
// ^
// |
//-------------------------------------+
END;