我试图从PostgreSQL数据库中提取记录通过应用过滤器(在条件与IN操作符)。然而一些错误,而转换字符串到可迭代元素。建议将不胜感激。
List<dynamic> detailedPositions = [];
Future<List<dynamic>> fetchDetailedPositions(String custID) async {
try {
print(custID); //output: ABC123, LP8338
print(custID.runtimeType); //output: string
await connection!.open();
await connection!.transaction((fetchDataConn) async {
_fetchMasterPositionData = await fetchDataConn.query(
"select cust_id, array_agg((cust_id, cust_name, quantity, item_nme, average_price)) from orders
where cust_id in (select cust_id from string_to_array(@cust_id,',')) and status='OPEN'"
substitutionValues: {'cust_id': custID, 'status': status},
timeoutInSeconds: 30,);
});
} catch (exc) {
print('Exception in fetchDetailedPositions');
print(exc.toString());
detailedPositions = [];
}
1条答案
按热度按时间rqmkfv5c1#
dbfiddle.uk demo
下面的代码是错误的:
https://www.postgresql.org/docs/current/functions-string.html#FUNCTION-STRING-TO-ARRAY string_to_array return text array.
您不能使用
正确的 * IN * 结构:
您也可以使用ANY:
因此,您的查询将类似于
但是,此查询返回的数据类型如下所示:
record []的使用大多数时候会有一些问题,最好使用json。所以下面就可以了。
json_agg用法:https://dba.stackexchange.com/questions/69655/select-columns-inside-json-agg