2014-07-25 13 views
5

Ho un set di dati, come di seguitosqlSave Aggiornamento DB Oracle Tabella -Non lavorare per campo Data

> 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 

e sono in grado di inserire questi record in una tabella già esistente 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) 

A table1 in Oracle Db - aggiungo un'altra colonna CRT_DTTM. La mia struttura della tabella è al di sotto

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

E in R dataframe - aggiungo una colonna (coreesponding ad una nuova colonna in Oracle)

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 

Quando provo a inserire nella tabella 1, ottengo qui di seguito errore di

> 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) 

il problema è con l'appena aggiunto 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" 

Il tipo di dati in R e Oracle per quella colonna è Date - ma non funziona. Ottengo errore. Qualcuno può aiutare, su questo.

Aggiornamento:

per rendere la domanda più semplice, Pls. A seguire 'tabla1' 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" ... 

non riesco a inserire questa colonna in Oracle DB. (Ho tabella in Oracle con solo 2 campi con varchar2 e data come tipo). Se converto la mia colonna CRT_DTTM in carattere in R e poi cambio il tipo Data in varchar2 in Oracle (sviluppo) - si sta inserendo. Tuttavia, non posso modificare il mio tipo di dati in Oracle (in produzione)

+0

hai potuto importare come una stringa e quindi utilizzare la funzione TO_DATE di Oracle DB dopo? –

+0

Aggiornare direttamente da R a Orcale DB, non posso modificare il mio tipo di dati. Quindi non posso fare to_date – RUser

+0

Qualcuno può aiutarci, perdere qualcosa di base, non è sicuro di come farlo, qualsiasi soluzione alternativa in R – RUser

risposta

1

Il formato predefinito di Oracle per DATE è "DD-MON-YY". Così ho scritto il codice qui sotto:

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

Dopo questo, io sono in grado di aggiornare il database con il date feild