2014-07-25 4 views
5

मैंsqlSave अपडेट कर रहा है Oracle DB टेबल दिनांक फ़ील्ड के लिए काम -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 

नीचे के रूप में एक डेटासेट है और मैं 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 तक - मैं एक और कॉलम CRT_DTTM जोड़ता हूं। मेरे तालिका संरचना

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

नीचे और आर Dataframe में है - मैं एक स्तंभ (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 

जोड़ते हैं मैं table1 में डालने के लिए प्रयास करते हैं, मैं नीचे मिल त्रुटि

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

उस कॉलम के लिए आर और ओरेकल में डेटाटाइप Date है - लेकिन यह काम नहीं कर रहा है। मुझे त्रुटि मिलती है। क्या कोई इस पर मदद कर सकता है।

अद्यतन:

प्रश्न सरल बनाने के लिए, Pls। आर

   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" ... 

में 'table1' नीचे खोजने के लिए मैं Oracle DB में इस कॉलम नहीं डाल सकते। (मैं varchar2 और प्रकार के रूप में की तारीख के साथ ही 2 क्षेत्रों के साथ Oracle में तालिका है)। यदि मैं अपने CRT_DTTM कॉलम को आर में वर्ण में परिवर्तित करता हूं और फिर ओरेकल (विकास) में दिनांक प्रकार को वर्कर 2 में बदलता हूं - यह सम्मिलित है। हालांकि, मैं ओरेकल (उत्पादन में) में अपना डेटाटाइप नहीं बदल सकता

+0

साथ डेटाबेस अद्यतन तुम सिर्फ एक स्ट्रिंग के रूप में आयात कर सकता है और उसके बाद के बाद ओरेकल DB के TO_DATE के समारोह का उपयोग करने में सक्षम हूँ? –

+0

मैं सीधे आर से ऑर्केल डीबी में अपडेट करता हूं, मैं अपना डेटा प्रकार या तो नहीं बदल सकता। तो मैं – RUser

+0

करने के लिए नहीं कर सकता, क्या कोई इस पर मदद कर सकता है, कुछ बुनियादी बातों से चूक रहा है, यह सुनिश्चित नहीं है कि यह कैसे करें, आर – RUser

उत्तर

1

DATE के लिए ओरेकल का डिफ़ॉल्ट प्रारूप "डीडी-मॉन-वाईवाई" है। तो मैं नीचे दिए गए कोड लिखा है:

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

इस के बाद, मैं date feild

संबंधित मुद्दे