小编典典

在RODBC报价单中的子句-SAP HANA

sql

我似乎无法FROM使用RODBC的以下条款来工作sqlQuery。我接受了@Lars Br的建议。的报价,但它仍然无法正常工作。我是

我知道占位符的作品,因为我在qlikview中使用过

所以下面的代码有效

table <- sqlQuery(myconn, 'SELECT *
                      FROM "_SYS_BIC"."mytable.TABLE/ALL_DATA"')

但是当我尝试添加以下内容时(我在传递日期参数)

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'))')

现在我知道我的单引号弄乱了它,所以我尝试了以下内容。

  1. 用双引号替换所有单引号-这不起作用
  2. 将所有单引号封装在双引号中
  3. 完全删除所有单引号。

阅读 175

收藏
2021-05-16

共1个答案

小编典典

在这里,您将陷入嵌套语法和多级语句处理的陷阱:

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-DD
selDate <- 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 selDate
sqlCMD <- 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 *或在获取结果数据集之前确保正确的过滤和聚合)。

2021-05-16