0

我使用“ dbWriteTable ”发现了错误,但找不到任何线索来处理它。错误是一样的:

.oci.WriteTable(conn, name, value, row.names = row.names, overwrite = overwrite, 中的错误:

.oci.GetQuery(con, stmt, data = value) 中的错误:ORA-00913:值太多

我得到了这种结构的 Oracle 表(Oracle 脚本的摘录):

create table My_table
(
 card_id    NUMBER(4),
 predictor  VARCHAR2(1000),
 interval   NUMBER(4),
 attributes VARCHAR2(1000),
 scoring    NUMBER(20,10),
 comments   VARCHAR2(1000),
 uploaded   DATE
)

数据框仅包含一行,其结构如下(“str”函数的 R 输出 - str(x)):

'data.frame':   1 obs. of  7 variables:  
 $ CARD_ID   : int 36  
 $ PREDICTOR : chr "YEAR"  
 $ INTERVAL  : int 1  
 $ ATTRIBUTES: chr ">= 1945 < 1960"  
 $ SCORING   : int 7000  
 $ COMMENTS  : chr "no comments"  
 $ UPLOADED  : Date, format: "2016-09-26"  

建立连接的脚本如下:

drv <- dbDriver("Oracle")
con <- dbConnect(drv, user, password, DB_name,bulk_read = rows_at_time)

将数据框插入 Oracle 表的脚本如下:

dbWriteTable(con, Oracle_table,  My_dataframe, row.names = FALSE, overwrite =   FALSE,
         append = TRUE, ora.number = TRUE, schema = NULL, date = FALSE
)

所以只有dbWriteTable 会产生以下错误:

.oci.GetQuery(con, stmt, data = value) 中的错误:ORA-00913:值太多

表的结构类似于数据框一。与其他数据集和其他 Oracle 表的使用似乎没问题,但不适用于此数据框。我很高兴听到任何关于如何处理此错误的消息。

4

1 回答 1

0

好吧,我已经找到了解决这个错误的方法。我使用过dbGetQuery(con, script,Oracle_table)。它运行良好。使用的脚本如下:

script <- paste("插入", user_card_table," 值 (:1, :2, :3, :4, :5, :6, :7)")

但我想知道为什么dbWriteTable中出现错误,因为另一个具有类似功能的脚本运行良好。

于 2016-10-10T09:20:46.017 回答