Мне нужно записать набор данных R в базу данных Oracle, используя R-пакет ROracle версии 1.3-1, R версии 3.4.1, Oracle OraClient 11g home, и я новичок в R.
Набор данных включал переменные нескольких разных типов данных и длины, в том числе несколько символьных типов длиной до 8000 символов.
Использование dbWriteTable
dbWriteTable(conn, "OracleTableName", df)
Я получаю эту ошибку:
Error in .oci.WriteTable(conn, name, value, row.names = row.names,
overwrite = overwrite, :
Error in .oci.GetQuery(con, stmt, data = value) :
ORA-01461: can bind a LONG value only for insert into a LONG column
или это
Error in .oci.GetQuery(con, stmt) :
ORA-02263: need to specify the datatype for this column
или это
drv <-
dbDriver("Oracle")
conn <-
dbConnect(
drv,
username = "username",
password = "password",
dbname = "dbname")
test.df1 <- subset(
df, select=c(
Var, Var2, Var3,
Var4, Var5, Var6))
dat <- as.character(test.df1)
attr(dat, "ora.type") <- "clob"
dbWriteTable(conn, "test2", dat)
возвращает это
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘dbWriteTable’ for
signature ‘"OraConnection", "character", "character"’
Из исследования ошибки выяснилось, что первая ошибка указывает на то, что более крупные поля — поля BLOB — не распознаются Oracle как BLOB.
В документации указано, что ROracle версии 1.3-1 должен поддерживать работу с большими типами данных. Он предлагает использовать атрибут для правильного сопоставления столбцов NCHAR, CLOB, BLOB, NCLOB в dbWriteTable. Мне не удалось успешно выполнить этот пример, так как я продолжаю получать ту же ошибку. Возможно, мне просто нужен пример, отличный от приведенного в документации?
Первоначально я использовал пакет RODBC, но обнаружил, что известно, что RODBC не обрабатывает большие типы данных (BLOB).
Любая помощь или совет приветствуются.