Oracle 使用sqlplus检索大型clob数据
如何使用sqlplus将大型clob数据从表中完全检索到标准输出?有一种方法可以完全使用特定于语言的DB API实现。但是当我尝试使用纯sqlplus获取它时,我遇到了几个问题,例如Oracle 使用sqlplus检索大型clob数据,oracle,sqlplus,clob,Oracle,Sqlplus,Clob,如何使用sqlplus将大型clob数据从表中完全检索到标准输出?有一种方法可以完全使用特定于语言的DB API实现。但是当我尝试使用纯sqlplus获取它时,我遇到了几个问题,例如 输出缓冲区太小(最大值为4000) 字符串缓冲区太小 由于oracle clob字段可以包含4GB(最大)的数据,是否有正确的方法使用sqlplus获取完整的数据块?我可以把它作为文件下载吗 我希望问题是清楚的。我更喜欢在不向数据库注入PL/SQL过程的情况下执行此操作。1)第一个表和clob create t
- 输出缓冲区太小(最大值为4000)
- 字符串缓冲区太小
create table large_clob(a clob);
insert into large_clob values( dbms_xmlgen.getXml('select * from dba_objects'));
2) 在sqlplus中运行代码
set linesize 32767 long 2000000000 longchunksize 32767 PAGESIZE 0 FEEDBACK OFF ECHO OFF TERMOUT OFF
Spool output_file.txt
select a from large_clob;
spool off
所有变量的描述如下所示
-指定要检索的CLOB字节数。(最大为2gb)long 20000000000
行的大小(最大32k)。线的大小。如果行超过大小,该行将被换行到下一行linesize
-将分块检索clob,其中块大小为32klongchunksize 32k
-取消分配结果页fomrationgPAGESIZE 0
-禁用所有这些功能李>反馈、回音、TERMOUT
将输出重定向到output_file.txtSpool
- 我就是这样做的。但在这里,可以检索的数据仅限于VARCHAR2(32767)的最大值
exec dbms_output.enable(32767);
将服务器输出设置为on
声明
数据缓冲区VARCHAR2(32767);
开始
在数据缓冲区中选择“| | CLOBDATA|U值| |”
从虚拟表格
其中ID='DUMMY_ID';
dbms_输出.put_行(数据_缓冲区);
例外情况
当没有找到任何数据时
dbms_output.put_行(“未选择行”);
结束;
它将clob数据按原样打印到标准输出
解释
- 以下两项增加了sqlplus的输出缓冲区大小
exec dbms_output.enable(32767)代码>
打开服务器输出
- 脚本所做的是将clob数据选择到
变量并通过VARCHAR2
打印它。只要有 无数据(dbms\u output.put\u line()
发生异常),异常将被删除 已处理并将生成错误消息no\u data\u found
设置heading off
。虽然此代码可以回答这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。从长远来看,纯代码的答案是没有用的。@ncfirth据我所知,它只是将sqlplus终端的输出重定向到一个文件。
exec dbms_output.enable(32767);
set serveroutput on
DECLARE
data_buffer VARCHAR2(32767);
BEGIN
SELECT '<BGN>' || CLOBDATA_VALUE || '<END>' into data_buffer
FROM DUMMY_TABLE
WHERE ID='DUMMY_ID';
dbms_output.put_line(data_buffer);
EXCEPTION
when no_data_found then
dbms_output.put_line('<BGN>no rows selected<END>');
END;