问题描述
在我的项目中,我需要使用utl文件将多行从单列导出到单行文本
下面的示例
我的表: 员工
员工名称
-----------------------------
史密斯
约翰
汤姆
亚当
我的输出文本文件应该像下面一样导出
史密斯约翰汤姆亚当
行之间不应有任何空间是分隔符。即使是一百万行也应该导出到
文本格式的单行
下面的示例
我的表: 员工
员工名称
-----------------------------
史密斯
约翰
汤姆
亚当
我的输出文本文件应该像下面一样导出
史密斯约翰汤姆亚当
行之间不应有任何空间是分隔符。即使是一百万行也应该导出到
文本格式的单行
专家解答
好吧,如果你知道最后的字符串将小于4,000字节长 * 你可以在SQL中使用listagg:
如果比这更长,但是 <32,767您可以在PL/SQL中构建字符串:
如果你超过32,767个字节,你可以使用clob:
* 如果您在12.1和up上,则可以使用listagg向上32,767,如果将MAX_STRING_SIZE设置为EXTENDED。
with rws as ( select rownum r, lpad(chr(rownum+64), 3, chr(rownum+64)) str from dual connect by level <= 5 ) select listagg(str, '') within group (order by r) s from rws; S AAABBBCCCDDDEEE
如果比这更长,但是 <32,767您可以在PL/SQL中构建字符串:
declare
s varchar2(32767);
begin
for rws in (
select rownum r, lpad(chr(rownum+64), 3, chr(rownum+64)) str
from dual
connect by level <= 10000
) loop
s := s || rws.str;
end loop;
dbms_output.put_line ('Length: ' || length(s));
dbms_output.put_line ('Start: ' || substr(s, 1, 30));
end;
/
Length: 30000
Start: AAABBBCCCDDDEEEFFFGGGHHHIIIJJJ如果你超过32,767个字节,你可以使用clob:
declare
s clob;
begin
dbms_lob.createtemporary ( s , true );
for rws in (
select rownum r, lpad(chr(rownum+64), 3, chr(rownum+64)) str
from dual
connect by level <= 20000
) loop
dbms_lob.append ( s, rws.str );
end loop;
dbms_output.put_line ('Length: ' || dbms_lob.getlength(s));
dbms_output.put_line ('Start: ' || dbms_lob.substr(s, 30, 1));
end;
/
Length: 60000
Start: AAABBBCCCDDDEEEFFFGGGHHHIIIJJJ* 如果您在12.1和up上,则可以使用listagg向上32,767,如果将MAX_STRING_SIZE设置为EXTENDED。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




