2014-07-25 13 views
5

Tôi có một Dataset như sausqlSave Đang cập nhật Oracle DB Bảng -Không làm việc cho lĩnh vực ngày

> 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 

Và tôi có thể chèn những hồ sơ này vào một bảng đã tồn tại trong 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) 

Để table1 trong Oracle Db - tôi thêm một cột khác CRT_DTTM. cấu trúc bảng của tôi là dưới

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

Và trong R Dataframe - i thêm một cột (coreesponding đến một cột mới trong 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 

Khi tôi cố gắng để chèn vào table1, tôi nhận được dưới đây lỗi

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

vấn đề là với các mới được bổ sung 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" 

Loại dữ liệu trong R và Oracle cho cột đó là Date - nhưng nó không hoạt động. Tôi gặp lỗi. Bất cứ ai có thể giúp, về điều này.

Cập nhật:

Để thực hiện các câu hỏi đơn giản, vui lòng. tìm bên dưới 'table1' trong 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" ... 

Tôi không thể chèn cột này vào Oracle DB. (Tôi có bảng trong Oracle chỉ có 2 trường có varchar2 và Ngày làm kiểu). Nếu tôi chuyển đổi cột CRT_DTTM của tôi thành ký tự trong R và sau đó thay đổi kiểu ngày thành varchar2 trong Oracle (phát triển) - nó được chèn. Tuy nhiên, tôi không thể thay đổi Datatype của mình trong Oracle (trong Production)

+0

có thể bạn chỉ cần nhập nó như là một chuỗi và sau đó sử dụng chức năng TO_DATE Oracle DB sau? –

+0

Tôi cập nhật trực tiếp từ R sang Orcale DB, tôi không thể thay đổi Loại dữ liệu của mình. Vì vậy, tôi không thể làm to_date – RUser

+0

Có thể ai đó, trợ giúp về điều này, bỏ lỡ một cái gì đó cơ bản, không chắc chắn làm thế nào để làm điều này, bất kỳ workaround trong R – RUser

Trả lời

1

Định dạng mặc định của Oracle cho DATE là "DD-MON-YY". vì vậy tôi đã viết đoạn code dưới đây:

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

Sau này, tôi có thể cập nhật cơ sở dữ liệu với date feild

Các vấn đề liên quan