我希望读入在Oracle数据库中存储为CLOB值的数据。内容只是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必须能够做到这一点。
非常感谢提前。
答案 0 :(得分:2)
我觉得我必须在发布前尝试过这个解决方案,但我回到了这个问题并且能够让它运行起来。
这次唯一的区别是我只尝试使用WHERE
子句将1条记录拉入R中。
这是我的问题:
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
答案 1 :(得分:0)
试试这个,我认为TO_CHAR MAX大小是4000:
"SELECT dbms_lob.substr(CONTENT, 32767, 1 ) AS content FROM REL_EMAIL_TEMPLATE"