sql - 长字符串参数化查询
问题描述
我有一个参数化的 SQL 查询,我想从 Exasol 数据库上的(本地)R 执行,如下所述: https ://db.rstudio.com/best-practices/run-queries-safely/#parameterized-queries 。
with tab as
(select
t.*,
position(value in ?) as pos
from MY_TABLE t
)
select * from tab where pos > 0;
传递给的值?
是一个(长)字符串。当这个字符串不超过 2000 个字符时,一切正常。当我将其增加到 2001 个字符时,出现错误:
Error in result_bind(res@ptr, as.list(params)) :
nanodbc/nanodbc.cpp:1587: 40001: [EXASOL][EXASolution driver]GlobalTransactionRollback
msg: data exception - string data, right truncation. (Session: 1640027176042911503)
我猜问题的根源是我的参数被识别为CHAR
而不是VARCHAR
。Exasol 用户手册指出:“两种类型的长度分别限制为 2,000 个字符 (CHAR) 和 2,000,000 个字符 (VARCHAR)”。
有什么办法可以投到?
吗VARCHAR
?
解决方案
如果您通过 ODBC 建立数据库连接,您可以尝试查看这些参数:
MAXPARAMSIZE
和DEFAULTPARAMSIZE
.
可能,如果您在 odbc 配置中将 DEFAULTPARAMSIZE 设置为更高的值:
https ://docs.exasol.com/connect_exasol/drivers/odbc/using_odbc.htm?Highlight=varchar
推荐阅读
- python - 查找我已经运行的 watch [script.py] 命令的输出
- c# - 如何将数组值写入同一行C#的列
- r - 如何在 R 中显示不同数据集的箱线图?
- javascript - 当我尝试使用“npm i react-bootstrap”安装 React-Bootstrap 时,为什么会出现“无法读取未定义的属性 'length'”错误?
- php - WP All Import - 通过 php 函数导入时将日期转换为 unix 时间戳
- python - pandas - 正则表达式提取文本,如果找不到模式则返回整个文本
- asp.net-core - 用于输入的 Razor 表单——如何显示输入模板?
- android-studio - 使用静态方法 String.valueOf() 为 TextView 的 setText() 方法包装不兼容参数的建议的设置在哪里?
- python - Python 类变量在方法结束后因未将 deepcopy 应用于列表而发生更改
- .net - 为什么将 gRPC 与通过 IP 地址连接的证书一起使用时会出现错误?