Чтение объектов CLOB в R как строковое значение

Я хочу прочитать данные, которые хранятся как значение CLOB в моей базе данных Oracle. Содержимое — это просто HTML, который отображает электронные письма, которые мы отправляем через наше приложение CRM. Я хочу воссоздать изображения электронной почты, чтобы включить их в свои отчеты о производительности CRM.

Я могу успешно прочитать данные в SPSS, используя следующий запрос, который преобразует CLOB в строку длины (32750).

GET DATA
  /TYPE=ODBC
  /CONNECT='DSN=<MYDSN>;UID=<USER>;PWD=mypassword;Host=myhost;Port=myport;SID='+
    'SID'
  /SQL='SELECT *  FROM mytable'
  /ASSUMEDSTRWIDTH=32750.
CACHE.
EXECUTE.
DATASET NAME clob_query WINDOW=FRONT.

Я хочу выполнить аналогичный запрос, но прочитать данные в R. Я попытался выполнить следующий запрос и получил следующую ошибку:

> SQL <-"SELECT to_char(CONTENT) as content from REL_EMAIL_TEMPLATE"
> ds <- sqlQuery(ch, SQL, as.is=T, stringsAsFactors=F)
> ds
[1] "HY000 22835 [Oracle][ODBC][Ora]ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: 5923, maximum: 4000)\n"
[2] "[RODBC] ERROR: Could not SQLExecDirect 'SELECT to_char(CONTENT) as content from REL_EMAIL_TEMPLATE'"   

Я не уверен, как я могу увеличить "буфер", но полагаю, что, поскольку я выполняю это в SPSS, R также должен иметь возможность делать это.

Спасибо заранее.


person Btibert3    schedule 31.08.2012    source источник


Ответы (2)


Я чувствую, что должен был попробовать это решение перед публикацией, но я вернулся к этой проблеме и смог запустить ее.

Единственная разница на этот раз в том, что я пытался вытащить в R только 1 запись, используя предложение WHERE.

Вот мой запрос:

SQL <- "SELECT TO_CHAR(CONTENT) FROM RELATEMGR.REL_EMAIL_TEMPLATE WHERE primary_key = 1"
body <- sqlQuery(ch, SQL, stringsAsFactors=F)

Странный. Не уверен, что другая версия R тоже имеет значение, но, по крайней мере, это привело меня туда, где мне нужно было быть.

Просто для полноты:

> sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RODBC_1.3-6

loaded via a namespace (and not attached):
[1] tools_2.15.0
person Btibert3    schedule 15.11.2012

Попробуйте это, я думаю, размер TO_CHAR MAX равен 4000:

"SELECT dbms_lob.substr(CONTENT, 32767, 1 ) AS content FROM REL_EMAIL_TEMPLATE"
person DARK_A    schedule 31.08.2012
comment
Спасибо, я попробовал это и получил другую ошибку. Я порылся в Интернете и изменил ваш запрос выше на 50000 вместо 32767. Это привело к правильному запросу, но все возвращенные данные были NA, что, как я знаю, не так. - person Btibert3; 31.08.2012
comment
[1] HY000 6502 [Oracle][ODBC][Ora]ORA-06502: PL/SQL: числовая ошибка или ошибка значения: буфер символьной строки слишком мал\nORA-06512: в строке 1\n [2] [RODBC] ОШИБКА: Не удалось SQLExecDirect 'SELECT dbms_lob.substr(CONTENT, 32767, 1) как содержимое из REL_EMAIL_TEMPLATE' - person Btibert3; 31.08.2012