使用R中dbWriteTable写入纯字符数据框到Oracle时类型转换错误
解决R中
dbWriteTable写入Oracle时的"Invalid character value for cast specification"错误 问题场景
仅包含字符类型变量的数据框,使用dbWriteTable写入Oracle数据库时触发类型转换错误。
错误信息
Error in result_insert_dataframe(rs@ptr, values, batch_rows) :
nanodbc/nanodbc.cpp:1655: 00000: [RStudio][Support] (40550) Invalid character value for cast specification.
原执行代码
people_df <- people_df %>% rename( LAST_NAME = sn, FIRST_NAME = givenName, TITLE = title, PRID = cn, COUNTRY = co, DEPARTMENT = department, DISPLAY_NAME = displayName ) dbWriteTable(con, "TEST_SHINY", people_df, append = TRUE)
目标Oracle表说明
目标表TEST_SHINY包含列:LAST_NAME、FIRST_NAME、JOB_TITLE、PRID、COUNTRY、DEPARTMENT、DISPLAY_NAME,初始定义中部分列的字符长度设置过短。
问题排查与解决
- 核心原因:数据库表中部分列的字符长度不足以容纳R数据框中的对应字符内容,导致类型转换失败。将所有列的字符长度调整为200后,错误消除。
- 额外说明:曾出现列名映射错误(将
title映射为TITLE,实际表中对应列名为JOB_TITLE),但该问题并非引发本次类型转换报错的原因。
最终可用代码
people_df <- (people_df %>% rename( LAST_NAME = sn, FIRST_NAME = givenName, JOB_TITLE = title, PRID = cn, COUNTRY = co, DEPARTMENT = department, DISPLAY_NAME = displayName ) %>% select(LAST_NAME, FIRST_NAME, JOB_TITLE, PRID, COUNTRY, DEPARTMENT, DISPLAY_NAME) ) dbWriteTable(con, "TEST_SHINY", people_df, append = TRUE)
内容的提问来源于stack exchange,提问作者smackenzie
相关产品推荐
相关产品推荐

