在这里,您将陷入嵌套语法和多级语句处理的陷阱:
table <- sqlQuery >(< myconn, 'SELECt * FROM "_SYS_BIC"."mytable.TABLE/ALL_DATA"'>)< ---! ('PLACEHOLDER' = ('$$AS_OF_DATE$$', '2017-01-09'), 'PLACEHOLDER' = ('$$ABCD_ONE$$', '0'), 'PLACEHOLDER' = ('$$ABCD_TWO$$', '0'), 'PLACEHOLDER' = ('$$EFGH$$', '12345'), 'PLACEHOLDER' = ('$$FLAG$$', '1'))')对于R,您的命令在我放置的位置结束,
< ---!其余所有内容对R都是无效的。
在这种情况下,请记住sqlQuery()函数期望第二个参数中包含 整个 SQL命令字符串,这一点很重要。这包括HANA的WITH
PARAMETER语法。
为了避免此类问题,可以先将SQL命令分配给变量,然后仅在函数调用中使用该变量。
为了使用R变量设置参数,可以使用文本替换。
# create the date parameter in the right format YYYY-MM-DDselDate <- format(Sys.Date() , "%F")
selDate [1]“ 2017-02-04”
# create the base SQL command with %D as a placeholder for the selDate# note how all single quotes inside the sqlCMD need to be escaped by a sqlCMD <- 'SELECt * + FROM "_SYS_BIC"."mytable.TABLE/ALL_DATA" + ('PLACEHOLDER' = ('$$AS_OF_DATE$$', '%D'), + 'PLACEHOLDER' = ('$$ABCD_ONE$$', '0'), + 'PLACEHOLDER' = ('$$ABCD_TWO$$', '0'), + 'PLACEHOLDER' = ('$$EFGH$$', '12345'), + 'PLACEHOLDER' = ('$$FLAG$$', '1'))'sqlCMD [1]“ SELECt * n + FROM ” _ SYS_BIC “。” mytable.TABLE / ALL_DATA
“ n +(’PLACEHOLDER’=(’$$ AS_OF_DATE $$’,’%D’), n +’ PLACEHOLDER’=(’‘$$
ABCD_ONE $$’,‘0’), n +’PLACEHOLDER’=(’$$ ABCD_TWO $$,‘0’), n
+’PLACEHOLDER’=(’$$ EFGH $$ ‘,‘12345’), n +’PLACEHOLDER’=(’$$ FLAG
$$’,‘1’))“
# now subsitute the %D with the selDatesqlCMD <- gsub ("%D", selDate, sqlCMD)sqlCMD [1]“ SELECt * n FROM ” _ SYS_BIC “。” mytable.TABLE / ALL_DATA “
n(’PLACEHOLDER’=(’$$ AS_OF_DATE $$’,‘2017-02-04’), n’PLACEHOLDER’=(’$$
ABCD_ONE $$’,‘0’), n’PLACEHOLDER’=(’$$ ABCD_TWO $$’,‘0’),
n’PLACEHOLDER’=(’$$ EFGH $$’,‘12345’), n’PLACEHOLDER’=(’$$ FLAG $$’,‘1’))“
# finally run the query table <- sqlQuery(myconn, sqlCMD)
当然,所有常规建议都适用(例如 不要 使用SELECT *或在获取结果数据集之前确保正确的过滤和聚合)。



