2014-07-25 9 views
5

Ich habe einen Datensatz wie untensqlSave aktualisiert Oracle DB Tabelle -Nicht für Datumsfeld Arbeits

> head(resultsclassifiedfinal_MC_TC_P1) 
    FEEDBACK_NUMBER Biz_Div_Num ACCURACY Category_Num CLASSIFIED_BY ACTIVE_IND CRT_BY_USR_NUM 
1 20140211-1173   556 99.48%   2303   CMC   1   SYSTEM 
2 20140211-1886   556 99.6%   2232   CMC   1   SYSTEM 
3 20140209-0115   556 66.09%   2232   CMC   1   SYSTEM 
4 20140202-0337   556 93.7%   2232   CMC   1   SYSTEM 
5 20140203-0418   552  50%   2232   CMC   1   SYSTEM 
6 20140303-1339   552 54.45%   2232   CMC   1   SYSTEM 

Und ich bin in der Lage, diese Datensätze in eine bereits vorhandene Tabelle in Oracle DB

> library(RODBC) 
> channel <- odbcConnect("R", uid="xxx", pwd="[email protected]") 
> sqlSave(channel,resultsclassifiedfinal_MC_TC_P1, tablename="table1", rownames=FALSE, append=TRUE,fast = FALSE,nastring = NULL) 
> odbcClose(channel) 

einfügen Um table1 in Oracle Db - ich füge eine weitere Spalte CRT_DTTM hinzu. Meine Tabellenstruktur ist unter

tmp <- sqlColumns(channel, "table1") 
> varspec <- tmp$TYPE_NAME 
> varspec 
[1] "VARCHAR2" "VARCHAR2" "VARCHAR2" "VARCHAR2" "VARCHAR2" "DECIMAL" "VARCHAR2" "DATE"  

Und in R Dataframe - i fügen Sie eine Spalte (auf eine neue Spalte in Oracle coreesponding)

resultsclassifiedfinal_MC_TC_P1$CRT_DTTM <- Sys.Date() 
FEEDBACK_NUMBER Biz_Div_Num ACCURACY Category_Num CLASSIFIED_BY ACTIVE_IND CRT_BY_USR_NUM CRT_DTTM 
1 20140211-1173   556 99.48%   2303   CMC   1   SYSTEM 2014-07-25 
2 20140211-1886   556 99.6%   2232   CMC   1   SYSTEM 2014-07-25 
3 20140209-0115   556 66.09%   2232   CMC   1   SYSTEM 2014-07-25 
4 20140202-0337   556 93.7%   2232   CMC   1   SYSTEM 2014-07-25 
5 20140203-0418   552  50%   2232   CMC   1   SYSTEM 2014-07-25 
6 20140303-1339   552 54.45%   2232   CMC   1   SYSTEM 2014-07-25 

Wenn ich versuche, in die tabelle1 einzufügen, erhalte ich unten

Fehler
> library(RODBC) 
> channel <- odbcConnect("R", uid="wl_XXX", pwd="[email protected]") 
> sqlSave(channel,resultsclassifiedfinal_MC_TC_P1, tablename="table1", rownames=FALSE, append=TRUE,fast = FALSE,nastring = NULL) 
Error in sqlSave(channel, resultsclassifiedfinal_MC_TC_P1, tablename = "table1", : 
    unable to append to table ‘table1’ 
> odbcClose(channel) 

Das Problem ist mit dem neu hinzugefügten CRT_DTTM

> sapply(resultsclassifiedfinal_MC_TC_P1,class) 
FEEDBACK_NUMBER CLASS_DIV_CD  ACCURACY CLASS_CATG_CD CLASSIFIED_BY  ACTIVE_IND 
     "factor"  "matrix"  "factor"  "matrix"  "factor"  "numeric" 
CRT_BY_USR_NUM  CRT_DTTM 
    "character"   "Date" 

> sapply(resultsclassifiedfinal_MC_TC_P1,mode) 
FEEDBACK_NUMBER CLASS_DIV_CD  ACCURACY CLASS_CATG_CD CLASSIFIED_BY  ACTIVE_IND 
     "numeric"  "numeric"  "numeric"  "numeric"  "numeric"  "numeric" 
CRT_BY_USR_NUM  CRT_DTTM 
    "character"  "numeric" 

Der Datentyp in R und Oracle für diese Spalte ist Date - aber es funktioniert nicht.Ich bekomme einen Fehler. Kann mir jemand helfen, auf diesem.

Update:

die Frage zu vereinfachen, Pls. finde unter ‚Tabelle1‘ in R

   FN CRT_DTTM 
1 20140526-0006 2014-07-30 
2 20140528-0005 2014-07-30 
3 20140613-0065 2014-07-30 
4 20140528-0002 2014-07-30 
5 20140522-0004 2014-07-30 

str(table1) 
'data.frame': 5 obs. of 2 variables: 
$ FN  : Factor w/ 5 levels 
$ CRT_DTTM: Date, format: "2014-07-30" "2014-07-30" "2014-07-30" ... 

Ich kann nicht diese Spalte in Oracle DB einfügen. (I mit nur zwei Feldern mit varchar2 und Datum als Typ-Tabelle in Oracle hat). Wenn ich meine CRT_DTTM Spalte in das Zeichen in R umwandle und dann den Date-Typ in Oracle in varchar2 (Entwicklung) ändere - wird eingefügt. Allerdings kann ich meinen Datentypen in Oracle (in Produktion) nicht ändern

+0

könnten Sie einfach importieren sie als String und dann mit Oracle DB TO_DATE Funktion nach aktualisieren? –

+0

Ich aktualisiere direkt von R zu Orcale DB, ich kann meinen Datentyp auch nicht ändern. So kann ich nicht to_date – RUser

+0

Kann jemand, Hilfe zu diesem, verpassen etwas Grundlegendes, nicht sicher, wie dies zu tun, jede Problemumgehung in R – RUser

Antwort

1

Oracle Standardformat für DATE ist "DD-MON-YY". so schrieb ich den folgenden Code:

now <- format(Sys.time(), "%d-%b-%y") 
resultsclassifiedfinal_MC_TC_P1$CRT_DTTM <- now 
resultsclassifiedfinal_MC_TC_P1$UPD_DTTM <- now 

Danach, ich bin in der Lage, die Datenbank mit den date feild

Verwandte Themen