SQL“where”子句与R JDBC HANA连接失败
我在通过R连接到我公司的HANA db时遇到了麻烦,但最终取得了突破,但是现在我的sql语句无法使用where语句对数据进行子集设置 下面返回9个变量的10个观测值的数据帧SQL“where”子句与R JDBC HANA连接失败,sql,r,jdbc,Sql,R,Jdbc,我在通过R连接到我公司的HANA db时遇到了麻烦,但最终取得了突破,但是现在我的sql语句无法使用where语句对数据进行子集设置 下面返回9个变量的10个观测值的数据帧 # Fetch all results rs <- dbSendQuery(jdbcConnection, 'SELECT TOP 10 VISITTYPE, ACCOUNT, PLANNEDSTART, PLANNEDEND, EXECUTIONSTART, EXECUTIONEND, STATUS, SOURC
# 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就可以避免引用标点或连接的需要。与大多数JDBCAPI一样,RJDBC支持。还要注意,dbGetQuery概括地等同于dbSendQuery+dbFetch:
它很可能是在一个内嵌的引号括起来的字符串中处理引号,SQL中用于标识符的双引号符号使这一过程更加复杂。然而,考虑参数化是一个行业最佳实践,只要在应用层(如R)中运行SQL就可以避免引用标点或连接的需要。与大多数JDBCAPI一样,RJDBC支持。还要注意,dbGetQuery概括地等同于dbSendQuery+dbFetch:
为了完成前面的答案,这里描述了问题的*根本原因**,这当然是最好的,因为它使用绑定变量: 当然,在单引号字符串中使用单引号必须 与Oracle使用加倍转义相反,R使用反斜杠 i、 e.正确使用方法如下:
> df <- dbGetQuery(jdbcConnection,
+ 'select * from "DUAL" where "DUMMY" = \'X\'')
> df
DUMMY
1 X
使用双引号字符串的替代方法
> df <- dbGetQuery(jdbcConnection,
+ "select * from \"DUAL\" where \"DUMMY\" = 'X'")
> df
DUMMY
1 X
为了完成前面的答案,这里描述了问题的*根本原因**,这当然是最好的,因为它使用绑定变量: 当然,在单引号字符串中使用单引号必须 与Oracle使用加倍转义相反,R使用反斜杠 i、 e.正确使用方法如下:
> df <- dbGetQuery(jdbcConnection,
+ 'select * from "DUAL" where "DUMMY" = \'X\'')
> df
DUMMY
1 X
使用双引号字符串的替代方法
> df <- dbGetQuery(jdbcConnection,
+ "select * from \"DUAL\" where \"DUMMY\" = 'X'")
> df
DUMMY
1 X
仅在VISITTYPE=ZR'的位置?例如,在字符串中使用双单引号。不幸的是,不是。错误:来自_SYS_BIC.cona-reporting.field-sales/Q_CA_R_SpringVisit的帐户名中出现意外字符串常量,其中VISITTYPE=ZR'@jarichardson。。。你把两边的单引号对折了吗?错误显示在一侧。是的,把它完全放在@jarlh的位置,但是错误显示了这一点。简单地说,VISITTYPE=ZR'在哪里?例如,在字符串中使用双单引号。不幸的是,不是。错误:来自_SYS_BIC.cona-reporting.field-sales/Q_CA_R_SpringVisit的帐户名中出现意外字符串常量,其中VISITTYPE=ZR'@jarichardson。。。你把两边的单引号对折了吗?错误显示在一边。是的,把它完全放在@jarlh的位置上,但是错误显示了这一点。谢谢,这很有趣。我永远也猜不到这一点。如果我有多个where语句,比如我想从status中选择FINAL,该怎么办?其他参数是按顺序读取的吗?因为这些是位置参数,并且文档的dbGetQuery带有。。。作为开放式参数,值应该绑定到?占位符按顺序排列。谢谢,这很有趣。我永远也猜不到这一点。如果我有多个where语句,比如我想从status中选择FINAL,该怎么办?其他参数是按顺序读取的吗?因为这些是位置参数,并且文档的dbGetQuery带有。。。作为开放式参数,值应该绑定到?按顺序排列占位符。