在Oracle中,我如何将大型blob作为文本文档读取

时间:2013-09-11 21:34:19

标签: java oracle text groovy blob

我有一个BLOB,实际上包含从几百个字符到20K +字符的文本。我得到了这个(我知道它应该是CLOB,但不是我的选择)。我需要能够获得整个文本文档。我最接近的是:

select utl_raw.cast_to_varchar2(dbms_lob.substr(blob_data,2000,1)) from my_table where id = 'id_value'; --get up to 2000

我不能一次超过2000,但我想我可以获得大小(使用dbms_lob.getlength)并一次获得2000并将它放在一起。似乎应该有一个更好的答案。有没有人有更好的方法?

2 个答案:

答案 0 :(得分:2)

我发现这里有用的东西: Getting Blob information via Groovy

这是我的Groovy代码:

String sqlQuery = "select EVENT_MSG_DATA as blob from AUDIT_EVENT where AUDIT_EVENT_ID = '" + auditEventId + "'";
def blob = sql.firstRow(sqlQuery).blob;
String messageContents = new String(blob.getBytes(1,(int)blob.length()));
return messageContents;

比其他可能性更容易。不知道为什么这么难找到这个解决方案。希望它能帮助别人。

答案 1 :(得分:0)

首先,您需要删除导致问题的转换为VARCHAR2(Data Types with Different Maximum Sizes in PL/SQL and SQL)。

然后,

从SQL * Plus中,定义列以显示足够的char(列...格式a n ),可能设置LONG size(COLUMN format, in Character section)然后SET SERVEROUTPUT ON SIZE 名词

来自PL / SQL,DBMS_OUTPUT.ENABLE( n

来自OCI的

,你需要分配一个定位器然后绑定它的地址,它不应该有一个大小限制

所有3, n 在2000和1000000之间。