2014-07-25 17 views
5

나는sqlSave 날짜 필드에 작업 -not

> 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 

다음과 같이 데이터 집합을 그리고 난

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

오라클 DB에 이미 존재하는 테이블에이 레코드를 삽입 할 수 있어요 Oracle Db에서 table1으로 - 다른 열 CRT_DTTM을 추가하십시오. 내 테이블 구조가

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

아래 그리고 R Dataframe에 - 내가 표에 삽입 할 때 내가 (오라클의 새로운 열에 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 

를 추가, 나는 아래 얻을 오류

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

문제는 새로 추가 된 함께 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" 

해당 열의 R 및 Oracle 데이터 유형은 Date입니다. 그러나 작동하지 않습니다. 오류가 발생합니다. 누구든지이 일을 도울 수 있습니다.

는 업데이트 :

Pls는, 문제는 간단한 확인하십시오. 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" ... 

에서 '표 1'을 검색 할 수 있습니다 나는 오라클 DB에이 열을 삽입 할 수 없습니다. (나는 유형으로 VARCHAR2 및 날짜 만이 필드를 오라클에 테이블이 있습니다). CRT_DTTM 열을 문자 R로 변환 한 다음 Oracle (개발)에서 varchar2로 날짜 유형을 변경하면 삽입됩니다. 그러나 Oracle에서 내 데이터 유형을 변경할 수 없습니다. (생산 중)

+0

으로 데이터베이스를 업데이트 한 다음 이후 오라클 DB의 TO_DATE 기능을 사용할 수 있어요,이 후

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

: 그래서 나는 아래의 코드를 작성? –

+0

R에서 Orcale DB로 직접 업데이트합니다. 데이터 유형을 변경할 수 없습니다. 그래서 난 to_date 할 수 없다 – RUser

+0

누군가가, 이것에 대한 도움을 줄 수있는 기본적인 방법에 대한 누락, R에있는 모든 해결 방법이 확실하지 않습니다 – RUser

답변

1

DATE의 오라클 기본 형식은 "DD-MON-YY"입니다. 난 그냥 문자열로 가져올 수있는 date feild