【openGauss】Java层传参到openGauss使用拼接字符串拆分为数组方案解决in中用foreach拼接的32767限制
一、sql格式
比如delete:
DELETE
FROM 表名
WHERE 主键ID字段 = any(string_to_array(#{fieldList, jdbcType=VARCHAR}, ','));
二、使用说明
- 上面例子的参数 “fieldList” 为xml外部java代码把list根据逗号拼接起来的字符串类型(VARCHAR)
三、测试
- 在数据库层面把传参替换为字符串。id为10位、50万个id执行上述delete语句,可以正常执行成功。
- 执行计划走了主键索引,执行时间13秒左右。
四、SQL解析
- 函数
string_to_array(text, text [, text])
的 第一个字符串是 text 文本类型,text字段类型最大存储字节长度为1GB。
五、其他说明
- 其他SQL,select/update/insert/delete ,使用到in的地方,都可以这样处理