0

商用DBにアクセスしています。プロンプト経由:

 select PersonCode, PersonDate from CODB.mastertable where PersonCode=42
 PersonCode  PersonDate 
 ----------- ------------
       42 Jan  3 2011
       42 Jan  3 2011
       42 Jan  3 2011
       42 Jan  3 2011
       42 Jan  3 2011
       42 Jan  3 2011
       42 Jan  3 2011
       42 Jan  3 2011
       42 Jan  3 2011
       42 Jan  3 2011

Rで:

library(RODBC)
query <- "select PersonCode, PersonDate from CODB.mastertable where PersonCode=42"

connection1 <- odbcConnect("RESDB", uid="userID", pwd="pwdaccess", believeNRows=FALSE)

sqlQuery(connection1,query)


sqlQuery(connection1,query)
    PersonCode                 PersonDate 
1          42 01/03/2011 00:00:00.000 UTC
2          42 01/03/2011 00:00:00.000 UTC
3          42 01/03/2011 00:00:00.000 UTC
4          42 01/03/2011 00:00:00.000 UTC
5          42 01/03/2011 00:00:00.000 UTC
6           0 01/03/2011 00:00:00.000 UTC
7           0 01/03/2011 00:00:00.000 UTC
8           0 01/03/2011 00:00:00.000 UTC
9           0 01/03/2011 00:00:00.000 UTC
10          0 01/03/2011 00:00:00.000 UTC

クエリの出力が正しくありません。以前にこの問題に遭遇した人はいますか? ここにいくつかの追加情報があります。

> sessionInfo()
R version 2.12.1 (2010-12-16)
Platform: x86_64-unknown-linux-gnu (64-bit)

locale:
[1] C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] timeDate_2130.92 data.table_1.5.3 RODBC_1.3-2

loaded via a namespace (and not attached):
[1] tools_2.12.1
4

2 に答える 2

1

解決策を見つけました。なぜそれが機能するのかわかりませんが、ここにあります:オプションを使用してくださいrows_at_time=1

sqlQuery(connection1,query,rows_at_time=1)
于 2011-05-19T20:55:22.550 に答える
1

odbcGetInfo() を使用して、使用されているドライバーに関する情報を表示できます。

ODBC の起源を考慮して、代わりに ROracle (DBI パッケージ) を使用してみましたか? RJDBC は、Linux 環境でもより安定したオプションである可能性があります。特に、fetch() コードが Java で書き直されているため (R-Forge の開発リリース 0.2-0 の時点で)、そのパフォーマンスは同等です (そうでない場合)。より良い)RODBC。

当たり前のように聞こえるかもしれませんが、問題は R32 で発生しますか (それがオプションである場合)? 32 ビット ドライバーと 64 ビット ドライバーの非互換性は、突き止めるのが非常に難しいことで知られています。Windows では、32 ビット ODBC ドライバーで R64 を使用するとアーキテクチャの不一致が発生し、odbcConnect() が完全に失敗しますが、Linux が同じかどうかはわかりません。

于 2011-05-11T13:41:38.280 に答える