2015-07-28 15 views
5

Rstudio'da programın çökmesine neden olan bir sqlQuery çalıştırmayı deniyorum. Bir Oracle veritabanından paket adı ve geçen süre adını almak için RODBC paketini kullanmak istiyorum. Ben tabloda sadece package_name veya diğer alanlarla bu çalıştırdığınızda böyle aşağıdakiR ile çalışmayan SQL veri türleri var mı?

dataframe <- sqlQuery(channel, 
"select package_name, elapsed_time from fooSchema.barTable") 

gibi bir sqlquery yapmaya çalıştığınızda, iyi çalışıyor. Bu işi elapsed_time ile çalıştırmaya çalışırsam, RStudio çöküyor. ,

orada böyle İkinci Aralığı Günü gibi belirli veri türleri, Are ELAPSED_TIMEELAPSED_TIME ait veri türü (3) İKİNCİ (6) böylece örneğin bir kayıt, şöyle "00,22723: 00 000 00" İÇİN ARALIK GÜNÜ olduğu Genel olarak RStudio veya R'de çalışmayan Oracle'dan mı?

+3

Hiçbir zaman Oracle kullanmamıştım, bu veri türüne aşina değilim, ancak RAST'a geri göndermeden önce, "VARCHAR" değerinizde/dize eşdeğeri Oracle'da ne varsa ne yapamazdınız? – nrussell

+2

@ nrussell'in önerisi muhtemelen en iyisidir, ancak tür eşleştirmenin RStudio, hatta gerçekten R'nin kendisi ile ilgisi olmadığını unutmayın. Bu tamamen RODBC paketi için kodun içinde yer alıyor. – joran

cevap

5

Sorun R, Rstudio ve hatta RODBC değil. Sorun, Oracle'ın ODBC bağlantıları için aralık veri türlerini desteklememesidir.

O daha genel anlamda sorunuza geri almak için bölüm E.1

https://docs.oracle.com/cd/B28359_01/server.111/b32009/app_odbc.htm#CIHBFHCG

altındadır. Taban R, Date, POSIXct ve POSIXlt nesnelerini destekler.

Date s ve POSIXct amaçları elemanlarının bir listesi, sırasıyla POSIXlt ise 1.1.1970 itibaren gün/saniye sayısı olarak depolanır.

Kullandığınız SQL bağlayıcısını, bir tarih ve saatin SQL sürümünü, yukarıdakilerden birine zorlamanız gerekir. Bazen sadece bir karakter dizisine dönüşür. Örneğin, RPostgreSQL ile Postgre'in Date tipi bir karakter olarak saklanan sütunları alır ancak Postgres timestamp sütunları doğrudan POSIXct içine zorlanır.