gpt4 book ai didi

r - sqlSave 更新 Oracle 数据库表 - 不适用于日期字段

转载 作者:行者123 更新时间:2023-12-04 21:41:47 27 4
gpt4 key购买 nike

我有一个如下的数据集

> 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="xxx@123")
> sqlSave(channel,resultsclassifiedfinal_MC_TC_P1, tablename="table1", rownames=FALSE, append=TRUE,fast = FALSE,nastring = NULL)
> odbcClose(channel)

table1在 Oracle Db 中 - 我添加另一列 CRT_DTTM .
我的表结构如下
tmp <- sqlColumns(channel, "table1") 
> varspec <- tmp$TYPE_NAME
> varspec
[1] "VARCHAR2" "VARCHAR2" "VARCHAR2" "VARCHAR2" "VARCHAR2" "DECIMAL" "VARCHAR2" "DATE"

在 R Dataframe 中 - 我添加了一个列(与 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

当我尝试插入 table1 时,出现以下错误
> library(RODBC)
> channel <- odbcConnect("R", uid="wl_XXX", pwd="XXX@123")
> 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 - 但它不起作用。我收到错误。
任何人都可以帮忙,在这方面。

更新:

为了使问题更简单,请。在 R 中找到下面的“table1”
              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" ...

我无法将此列插入到 Oracle DB 中。(我在 Oracle 中有表,其中只有 2 个字段,类型为 varchar2 和 Date)。如果我转换我的 CRT_DTTM列到 R 中的字符,然后在 Oracle(开发)中将日期类型更改为 varchar2 - 它是插入。但是,我无法在 Oracle(生产中)中更改我的数据类型

最佳答案

Oracle 的默认日期格式是“DD-MON-YY”。
所以我写了下面的代码:

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

在此之后,我可以使用 date feild 更新数据库

关于r - sqlSave 更新 Oracle 数据库表 - 不适用于日期字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24958084/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com