2

我有一个 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 并将它们放在一起。似乎应该有一个更好的答案。有没有人有更好的方法?

4

2 回答 2

2

我在这里找到了有效的方法: 通过 Groovy 获取 Blob 信息

这是我的 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;

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

于 2013-09-16T17:55:53.760 回答
0

首先,您需要删除对 VARCHAR2 的转换,这会导致问题(PL/SQL 和 SQL 中具有不同最大大小的数据类型)。

然后,

从 SQL*Plus 中,定义列以显示足够的字符(列 ... 格式化n),可能设置 LONG 大小(COLUMN 格式,在字符部分),然后 SET SERVEROUTPUT ON SIZE n

来自 PL/SQL,DBMS_OUTPUT.ENABLE( n )

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

所有 3 个,n在 2000 到 1000000 之间。

于 2013-09-12T15:26:06.837 回答