sql - SQL“where”子句因 R JDBC HANA 连接而失败
问题描述
我在通过 R 连接到我公司的 HANA 数据库时遇到了麻烦,但最终取得了突破,但是现在我的 sql 语句无法使用“where”语句对数据进行子集化。
以下返回跨 9 个变量的 10 个观测值的数据框
# Fetch all results
rs <- dbSendQuery(jdbcConnection, 'SELECT TOP 10
VISITTYPE,
ACCOUNT,
PLANNEDSTART,
PLANNEDEND,
EXECUTIONSTART,
EXECUTIONEND,
STATUS,
SOURCE,
ACCOUNT_NAME
FROM "_SYS_BIC"."cona-reporting.field-sales/Q_CA_R_SpringVisit"')
a <- dbFetch(rs)
但是,当我将 where 放入其中时,会收到错误消息。
rs <- dbSendQuery(jdbcConnection, 'SELECT TOP 10
VISITTYPE,
ACCOUNT,
PLANNEDSTART,
PLANNEDEND,
EXECUTIONSTART,
EXECUTIONEND,
STATUS,
SOURCE,
ACCOUNT_NAME
FROM "_SYS_BIC"."cona-reporting.field-sales/Q_CA_R_SpringVisit" WHERE VISITTYPE = ZR')
Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ", :
Unable to retrieve JDBC result set for SELECT TOP 10
VISITTYPE,
ACCOUNT,
PLANNEDSTART,
PLANNEDEND,
EXECUTIONSTART,
EXECUTIONEND,
STATUS,
SOURCE,
ACCOUNT_NAME
FROM "_SYS_BIC"."cona-reporting.field-sales/Q_CA_R_SpringVisit" WHERE VISITTYPE = ZR (SAP DBTech JDBC: [260] (at 222): invalid column name: ZR: line 11 col 101 (at pos 222))
这是什么意思?ZR 不是列,它是列内的值。尝试将 ZR 放在引号中,但没有其他效果。
我的双引号和单引号语法基于我提出的另一个问题。
从来没有让它与 RODBC 一起工作,所以尝试了 JODBC。
解决方案
很可能它正在处理嵌入的引号括起来的字符串中的引号,而 SQL 中用于标识符的双引号符号使情况更加复杂。但是,请考虑参数化(在 R 等应用层中运行 SQL 时的行业最佳实践)以避免引号标点或连接的需要。与大多数 JDBC API 一样,RJDBC 支持参数化。另请注意,dbGetQuery
大致等同于dbSendQuery
+ dbFetch
:
sql <- 'SELECT TOP 10 VISITTYPE,
ACCOUNT,
PLANNEDSTART,
PLANNEDEND,
EXECUTIONSTART,
EXECUTIONEND,
STATUS,
SOURCE,
ACCOUNT_NAME
FROM "_SYS_BIC"."cona-reporting.field-sales/Q_CA_R_SpringVisit"
WHERE VISITTYPE = ?'
param <- 'ZR'
df <- dbGetQuery(jdbcConnection, sql, param)
推荐阅读
- mysql - 存储的 FUNCTION 没有在 MySql 中返回结果?
- java - 可扩展的recyclerview实现
- ios - 如何修复 Xcode 错误 - 类不是键编码
- python - 为什么我必须同时写 'read' 和 'r' 才能使用 pandas 写入文件
- python - 如何解决以下子流程错误?
- java - Spring boot Soap web服务创建Jaxb2插件报错
- css - CSS clip-path 属性:相对路径➰
- julia - 如何使用 RCall.jl 安装 R 包
- javascript - Request/forLoop/Promise 嵌套娃娃地狱 - Node JS
- python - 另一个用户没有添加到被禁止的成员中