2015-07-28 5 views
5

Ich versuche, eine sqlQuery in Rstudio ausführen, die das Programm abstürzen scheint. Ich möchte das RODBC-Paket verwenden, um einen Namen namens Paketname und verstrichene Zeit aus einer Oracle-Datenbank zu importieren. Wenn ich versuche, eine sqlquery wie die folgendenGibt es SQL-Datentypen, die nicht mit R funktionieren?

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

zu tun, wenn ich diese laufe nur mit dem package_name oder anderen Feldern in der Tabelle, es funktioniert gut. Wenn ich versuche, dies mit der elapsed_time auszuführen, stürzt RStudio ab. Der Datentyp von elapsed_time ist INTERVAL DAY (3) TO SECOND (6) so ein Datensatz zum Beispiel sieht wie folgt aus: "+000 00: 00: 00,22723"

Gibt es bestimmte Datentypen, wie Interval Tag zu der zweiten, von Oracle, die nicht in RStudio oder R im Allgemeinen funktionieren?

+3

Ich habe noch nie mit Oracle gearbeitet, daher bin ich mit diesem Datentyp nicht vertraut, aber konnte man es nicht mit einem 'VARCHAR'/was auch immer die Zeichenkette in Oracle ist vor der Rückgabe an R? – nrussell

+2

@ nrussell Vorschlag ist wahrscheinlich am besten, aber sei dir bewusst, dass die Typ-Matching hat nichts mit RStudio oder sogar wirklich R selbst zu tun. Dies geschieht vollständig innerhalb des Codes für das RODBC-Paket. – joran

Antwort

5

Das Problem ist nicht R, Rstudio oder sogar RODBC. Das Problem besteht darin, dass Oracle Intervalldatentypen für ODBC-Verbindungen nicht unterstützt.

Es ist unter Abschnitt E.1

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

Um auf Ihre Frage zurück in einem allgemeineren Sinn zu bekommen. Base R unterstützt Date, POSIXct und POSIXlt Objekte.

Date s und POSIXct Objekte werden als die Anzahl der Tage/Sekunden jeweils seit dem 1.1.1970 gespeichert, während POSIXlt eine Liste von Elementen ist.

Egal, welchen SQL-Connector Sie verwenden, müssen Sie die SQL-Version eines Datums und einer Uhrzeit in eines der oben genannten Formate konvertieren. Manchmal wird es nur in eine Zeichenkette umgewandelt. Zum Beispiel mit RPostgreSQL nimmt es Spalten als Postgre Date Typ als ein Zeichen, aber Postgres timestamp Spalten werden direkt in POSIXct gezwungen.

Verwandte Themen