SAP HanaDB SQL中声明数组/表变量值的错误

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

我正在尝试添加一个声明的变量来替换“ 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参考文档(有关数组/表变量,嵌套函数等),似乎我已经正确设置了所有内容,但无法弄清楚这些错误。我希望能够在可能的情况下在不同的时间使用这两种方法(“数组变量到表变量”和“仅数组变量”方法)

hana
1个回答
0
投票

是,您已经正确完成了所有操作,除了一件小事:

要在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;
© www.soinside.com 2019 - 2024. All rights reserved.