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