我有一个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 并把它放在一起。 似乎应该有更好的答案。 有没有人有更好的方法?
我在这里找到了有效的方法:通过 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;
比其他可能性容易得多。 不知道为什么很难找到这个解决方案。 希望它能帮助别人。
首先,您需要删除到 VARCHAR2 的转换,这会导致问题(PL/SQL 和 SQL 中具有不同最大大小的数据类型)。
然后
从 SQL*Plus 中,定义列以显示足够的字符(列...格式a n),可能设置长大小(列格式,在字符部分),然后在大小 n 上设置服务器输出
来自PL/SQL,DBMS_OUTPUT。启用(n)
从 OCI 中,您需要分配一个定位器然后绑定其地址,它不应该有大小限制
所有 3 个 N 在 2000 和 1000000 之间。