首页 > 解决方案 > 长字符串参数化查询

问题描述

我有一个参数化的 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

标签: sqlr-dbiexasolution

解决方案


如果您通过 ODBC 建立数据库连接,您可以尝试查看这些参数:
MAXPARAMSIZEDEFAULTPARAMSIZE.

可能,如果您在 odbc 配置中将 DEFAULTPARAMSIZE 设置为更高的值:
https ://docs.exasol.com/connect_exasol/drivers/odbc/using_odbc.htm?Highlight=varchar


推荐阅读