Sql 长字符串参数化查询
我有一个参数化SQL查询,我想从Exasol数据库上的本地R执行,如下所述: 以制表符作为 选择 t、 *, 价值在哪里?as pos 从我的桌子上 从pos>0的选项卡中选择*; 传递给的值?这是一条很长的线。当该字符串长度小于等于2000个字符时,一切正常。当我将其增加到2001个字符时,我得到一个错误:Sql 长字符串参数化查询,sql,r-dbi,exasolution,Sql,R Dbi,Exasolution,我有一个参数化SQL查询,我想从Exasol数据库上的本地R执行,如下所述: 以制表符作为 选择 t、 *, 价值在哪里?as pos 从我的桌子上 从pos>0的选项卡中选择*; 传递给的值?这是一条很长的线。当该字符串长度小于等于2000个字符时,一切正常。当我将其增加到2001个字符时,我得到一个错误: Error in result_bind(res@ptr, as.list(params)) : nanodbc/nanodbc.cpp:1587: 40001: [EXASOL][E
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用户手册说明:
这两种类型的长度分别限制为2000个字符CHAR和2000000个字符VARCHAR
有什么办法可以投吗?到VARCHAR?如果通过ODBC建立db连接,可以尝试查看以下参数: MAXPARAMSIZE和DEFAULTPARAMSIZE 可能,如果在odbc配置中将DEFAULTPARAMSIZE设置为更高的值:
当我尝试使用第一个建议的方法来运行教程中描述的参数化查询时,上面的问题已经出现了:。第一种方法使用函数dbSendQuery和dbBind的组合
当我切换到使用sqlInterpolate函数的第二个不太安全的方法时,我的长字符串问题就解决了。谢谢你的提示。我已经通过使用DBI::sqlInterpolate函数解决了这个问题。