我将 RODBC 与 R 和 knitr 一起使用,使用各种生产数据库进行一些报告。在其中一些报告中,我正在对多个数据库运行乘法查询。
我的每个查询都以以下形式执行:
get.total.orders <- function(db.connex.string, start.date, end.date){
db.connex <- odbcDriverConnect(db.connex.string)
ord.qry <- sprintf("SELECT ord_OrderReference AS 'order.ref',
ord_RegisterDate as 'register.date'
FROM Orders
WHERE ord_RegisterDate >= '%s' AND ord_RegisterDate < '%s'",
start.date, end.date)
orders <- sqlQuery(db.connex, ord.qry)
odbcClose(db.connex)
return(orders)
}
请注意,在此函数中打开和关闭 ODBC 通道,并且在通道的打开和关闭之间只运行一个简单的查询。
尽管如此,当我多次运行报告时(例如,在开发报告时),我会收到如下警告:
Warning: closing unused RODBC handle 41
我运行报告的次数越多,错误中报告的句柄数就越高。
为什么,如果我在查询函数中打开和关闭通道,我会留下打开的、“未使用的”RODBC 句柄吗?
更重要的是,我怎样才能避免这个问题?