如何在hana db中使用变量in运算符?

sh7euo9m  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(525)

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

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

但它删除了错误:“不一致的数据类型:表类型与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

太完美了。为什么运行这个而第一个不运行?如何用变量来解决这个问题?

46qrfjad

46qrfjad1#

您将标量值的比较与表数据类型混为一谈。
表类型变量只存在于sqlscript中,sqlscript编译器不理解/不支持表类型变量的自动转换 :var 将表类型化变量放入适当的子查询中。这根本不是表变量的作用。
通过执行前面所述的操作,即使用子选择,可以轻松解决此问题:

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;
nhaq1z21

nhaq1z212#

是的,你可以。只是做不到你想要的。相当于 = . 即使值包含以下字符 , 或者 '' ; 这些只是字符串中的字符。
如果没有方便的字符串拆分器功能,则始终可以使用字符串操作:

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

相关问题