私は R と Knitr で RODBC を使用して、さまざまな実稼働データベースを使用してレポートを作成しています。これらのレポートのいくつかでは、複数のデータベースに対して複数のクエリを実行しています。
私のクエリはそれぞれ、次の形式の関数で実行されます。
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 チャネルはこの関数で開いたり閉じたりすることに注意してください。また、チャネルを開いたり閉じたりする間に実行されるクエリは 1 つだけであることに注意してください。
それにもかかわらず、レポートを複数回実行すると (レポートの作成時など)、次のような警告が表示されます。
Warning: closing unused RODBC handle 41
レポートを実行する回数が増えるほど、エラーで報告されるハンドルの数が多くなります。
クエリ関数でチャネルを開いたり閉じたりすると、「未使用」の RODBC ハンドルが開いたままになるのはなぜですか?
さらに重要なことに、この問題を回避するにはどうすればよいですか?