R将所需变量从ODBC/HANA连接传递到sql语句
我有一张桌子,我正试图用我通常的方法调用它R将所需变量从ODBC/HANA连接传递到sql语句,sql,r,odbc,hana,rodbc,Sql,R,Odbc,Hana,Rodbc,我有一张桌子,我正试图用我通常的方法调用它 sql <- 'SELECT TOP 10 * FROM "_SYS_BIC"."data-path.self-service.DOIP/table_name"' df <- dbGetQuery(jdbcConnection, sql) 我一直试图用where子句将IP_ExtractionWeekFrom插入sql语句,但没有成功 param1 <- 201943 sql <- 'SELECT TOP
sql <- 'SELECT TOP 10 *
FROM "_SYS_BIC"."data-path.self-service.DOIP/table_name"'
df <- dbGetQuery(jdbcConnection, sql)
我一直试图用where子句将IP_ExtractionWeekFrom插入sql语句,但没有成功
param1 <- 201943
sql <- 'SELECT TOP 10 *
FROM "_SYS_BIC"."ccf-edw.self-service.DOIP/R_CA_B_DemandPlan" where
"$$IP_ExtractionWeek$$" = ?'
SpringVisit <- dbGetQuery(jdbcConnection, sql, param1)
param1考虑在R中集成参数,并正确处理标识符的双引号和文字的单引号,从而维护工作表查询
此外,旧的('PLACEHOLDER'=('',)
语法不支持参数化
相反,如中所述,请使用占位符。“=>?
语法
param1下面带有硬编码param值的查询是否在SAP/hana控制台或IDE或工作台(即R之外)中工作?我们本身没有。在我加入之前,大多数数据都是通过我们的Tableau/HANA连接提取的,它的sql显示为“ccf edw.self-service.DOIP::Q_CA_B_DemandPlan”(“占位符”=(“$$IP_ExtractionWeekFrom$$”,“201943”)中的SELECT*,“占位符”=(“$$IP_ExtractionWeekTo$$”,“201943”)“ccf_edw_self_service_DOIP_Q_CA_B_DemandPlan”在哪里(10)
您尝试在R中进行查询了吗?结果是什么?当然,语法错误参数1为什么您要双重引用“占位符”
和“$$IP_ExtractionWeekTo$”
?双引号在SQL中表示特定的内容,不能与R中的单引号互换。保持原样,将整个SQL包装在R变量的双引号中,然后用反斜杠转义任何SQL双引号。在第一个(SAP DBTech JDBC:[257]:SQL语法错误:附近的语法不正确“?”:第3行第59列(位置148处))
非常感谢这个链接,我一直在想这个区别。将JDBC连接到模式,并获得了接近“”的语法错误。这实际上是一个不同的错误。您可能无法参数化。请尝试在dbGetQuery
中用不带参数的实际数字替换?
,然后查看查询是否运行。是的!我们开始了。非常感谢。新的sql语句读作sql@jarichardson,请查看SAP HANA专家显示参数时编辑的解决方案新的占位符语法支持插入。
param1 <- 201943
sql <- 'SELECT TOP 10 *
FROM "_SYS_BIC"."ccf-edw.self-service.DOIP/R_CA_B_DemandPlan" where
"$$IP_ExtractionWeek$$" = ?'
SpringVisit <- dbGetQuery(jdbcConnection, sql, param1)
sql <- "SELECT TOP 10 *
FROM \"ccf-edw.self-service.DOIP::R_CA_B_DemandPlan\"(
PLACEHOLDER.\"$$IP_ExtractionWeekFrom$$\", ?),
PLACEHOLDER.\"$$IP_ExtractionWeekTo$$\", ? )
)\"ccf-edw.self-service.DOIP::R_CA_B_DemandPlan\"
WHERE (1 <> 0)"