如何在 HANA DB 的 IN 运算符中使用变量?

How can I use variable in IN operator in HANA DB?

我想在 IN 运算符中使用变量。我试过数组,但我做不到。所以我尝试了这个方法:

Do BEGIN    

    var = SELECT ELEMENT_NAME FROM TABLE_NAME WHERE ELEMENT_NAME IN ('1', '2', '3');

    UPDATE TABLE_NAME
    SET DATE_DATA = ADD_MONTHS( DATE_DATA, 1 )
    WHERE ELEMENT IN (:var);

END

但它会抛出错误:“不一致的数据类型:TABLE 类型无法与 NVARCHAR 进行比较”。

但是如果我使用这个,没有变量但相同的查询:

Do BEGIN    

    UPDATE TABLE_NAME
    SET DATE_DATA = ADD_MONTHS( DATE_DATA, 1 )
    WHERE ELEMENT IN (SELECT ELEMENT_NAME FROM TABLE_NAME WHERE ELEMENT_NAME IN ('1', '2', '3'));

END

太完美了。为什么 运行 这个和第一个不是?我怎样才能用变量解决这个问题?

是的,你可以。它只是不做你想要的。相当于=。即使该值具有 ,'' 等字符;这些只是字符串中的字符。

如果您没有方便的字符串拆分器功能,您可以随时使用字符串操作:

',' || :var || ',' like '%,' || element ',%'

您混淆了 标量 值与 table 数据类型的比较。

Table 类型变量仅存在于 SQLScript 中,SQLScript 编译器不会 understand/support 自动将 :var table 类型变量转换为正确的子查询.这根本不是 table 变量的目的。

您可以通过执行您已经描述的操作轻松解决此问题,即使用 sub-select:

DO 
BEGIN    

var = SELECT 
            ELEMENT_NAME 
      FROM 
           TABLE_NAME 
      WHERE ELEMENT_NAME IN ('1', '2', '3');

    UPDATE TABLE_NAME
           SET DATE_DATA = ADD_MONTHS( DATE_DATA, 1 )
    WHERE 
         ELEMENT IN 
            (select element_name from :var);
END;