0

我想SELECT * FROM ${TABLE_NAME} where id in $keys[] 在运行使用时执行以下查询,ARRAY (JSON)如文档示例中所示

let statement = `DECLARE $keys ARRAY(JSON); SELECT * FROM ${TABLE_NAME} where id in $keys[]`;

我有以下错误

LHS type: INTEGER RHS type: STRING

如何解决这个问题。有任何想法吗 ?

4

1 回答 1

0

这意味着您发送的数组元素是字符串而不是整数。您的 ID 列似乎是 INTEGER。

我以为在你的程序中你有类似的东西

preparedStmt.set( '$keys', ["3","4","5","100"]);

所以第一个解决方案是发送一个 INTEGER 数组

preparedStmt.set( '$keys', [3,4,5,100]);

另一种解决方案是更改变量的类型

let statement = `DECLARE $keys ARRAY(INTEGER); SELECT * FROM ${TABLE_NAME} where id in $keys[]`;

但是如果你有非整数值,你将有以下错误

preparedStmt.set( '$keys', ["3","4","5","100","BAD DATA"]);

这里的错误

NoSQLArgumentError: [ILLEGAL_ARGUMENT] Failed to create Field Value for variable '$keys': Invalid string for Integer: BAD DATA

在这种情况下,我建议在客户端级别进行管理

 preparedStmt.set( '$keys', [3,4,5,"100","BAD DATA"].map(i=>Number(i)).filter( value => !Number.isNaN(value) ) );
于 2021-06-24T19:00:52.480 回答