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 に答える