如何在 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;
我想在 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;