如何在通过RStudio运行的SQL查询中使用绑定变量

如何在通过RStudio运行的SQL查询中使用绑定变量,sql,r,oracle,Sql,R,Oracle,为了简化流程,我正在探索RStudio的“SQL源代码”脚本功能,以预览SQL查询的结果。(为了清楚起见,我正在尝试使用DBI包和previewSql函数,通过.SQL脚本在RStudio中运行原始SQL查询。更多详细信息。) 当我在TOAD IDE中测试运行SQL查询时,我通常使用绑定变量。例如,下面是带有绑定变量的SQL查询的基本示例: SELECT * FROM DATA WHERE DATE BETWEEN :START_DATE AND :END_DATE 在TOAD中,当运行带有绑

为了简化流程,我正在探索RStudio的“SQL源代码”脚本功能,以预览SQL查询的结果。(为了清楚起见,我正在尝试使用DBI包和previewSql函数,通过.SQL脚本在RStudio中运行原始SQL查询。更多详细信息。)

当我在TOAD IDE中测试运行SQL查询时,我通常使用绑定变量。例如,下面是带有绑定变量的SQL查询的基本示例:

SELECT *
FROM DATA
WHERE DATE BETWEEN :START_DATE AND :END_DATE
在TOAD中,当运行带有绑定变量的SQL查询时,会自动打开一个对话框,允许我快速定义绑定变量的值(例如
START\u DATE
END\u DATE
)。这是我在测试新SQL查询的不同情况时常用的TOAD的一个方便特性

有没有一种方法可以在RStudio中预览原始SQL查询,并且绑定变量保持不变

顺便说一下,我以前用R变量运行过SQL查询,替换了SQL绑定变量。此替代方法在.R脚本中运行,使用
DBI
ROracle
包中的函数。例如,我将定义以下对象:
START\u DATE
END\u DATE
SQL\u QUERY\u STRING
,以及
SQL\u RESULTS

START_DATE <- "'01-jan-2020'"
END_DATE <- "'31-jan-2020'"

SQL_QUERY_STRING <- paste("SELECT * FROM DATA WHERE DATE BETWEEN", START_DATE, "AND", END_DATE)

SQL_RESULTS <- dbGetQuery(con, SQL_QUERY_STRING)

START\u DATE顺便说一句,您在第二个代码块中所做的是违反最佳实践的,并且容易发生SQL注入(故意/恶意或意外)。虽然您所做的已经足够安全,但当您开始以编程方式进行操作时,此方法将无法继续使用。请参阅。@r2evans感谢您分享这篇关于安全运行SQL查询的最佳实践的文章。这很有帮助!顺便说一句,对于其他有类似问题的人,在进一步研究之后,RStudio中似乎还没有实现预览参数化查询的SQL查询结果的功能:通过rmarkdown变量和glue_SQL还有另一个选项,请参见此处或此处