Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL“where”子句与R JDBC HANA连接失败_Sql_R_Jdbc - Fatal编程技术网

SQL“where”子句与R JDBC HANA连接失败

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

我在通过R连接到我公司的HANA db时遇到了麻烦,但最终取得了突破,但是现在我的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就可以避免引用标点或连接的需要。与大多数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带有。。。作为开放式参数,值应该绑定到?按顺序排列占位符。