Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Oracle中,如何将大blob作为文本文档读取_Java_Oracle_Text_Groovy_Blob - Fatal编程技术网

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

Java 在Oracle中,如何将大blob作为文本文档读取,java,oracle,text,groovy,blob,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.getlengt

我有一个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个,然后把它们放在一起。似乎应该有更好的答案。有人有更好的方法吗?

首先,您需要删除对VARCHAR2的转换,这会导致问题()

那么

从SQL*Plus中,定义列以显示足够的字符(列…格式an),可能设置长大小(),然后将SERVEROUTPUT设置为大小n

从PL/SQL,DBMS_OUTPUT.ENABLE(n)

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

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

我在这里找到了有效的方法:

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

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

您需要它只是为了在SQL*Plus中显示,还是在存储过程/函数中使用,或者是为了将数据检索到外部应用程序?是否仅限于一个选择?为什么不使用?提取的最终目的是什么?我只需要将其用于支持人员通过web应用程序查看的目的。我将查看转换呼叫-thx!谢谢-我会尝试一下,尽管我承认我不清楚这一切。您能给出Oracle DB的实际步骤吗?