sqlplus从假脱机删除\ r \ n \ t

问题描述 投票:3回答:2

是否有任何sql * plus命令从要输出到假脱机文件的结果集中删除\r \n\t?也就是说,“修剪”每条记录?

我们过去使用过set trim on,但似乎并没有满足我们现在的需要。我试图避免在sql查询中调用oracle的翻译,chr函数。

例如,

set termout off
set spool somefile.dat
set lin  600

select data from mytable;

set spool off;
exit;

我的查询返回此内容

|DATA|
|\n \t\t\t\t\t thisistheactualdata \t\t\t\t\t\t\n|

而且我想将此保留在假脱机文件中

thisistheactualdata

更新

嗯,我们最终做了这样的事情。

set tab off;
spool /home/oracle/out.dat

set linesize 20
set termout off
set trim on
select regexp_replace(l,'(\t|\n)','') from test;

spool off;
exit;

但是有一个坏消息:我们需要在oracle 8中运行它,而regexp_replace似乎不可用。 :(

提前感谢。

oracle sqlplus trim oracle8i
2个回答
3
投票

我认为您无法使用SQL * Plus指令来执行此操作。 SQL * Plus是一个非常瘦的客户端,并且不旨在接触结果集本身中的数据。

如果您不想使用内置的SQL函数来修改输出,那么我认为您对后处理假脱机文件感到困惑。

由DCookie编辑:由于我错过了OP最初对基于非TRANSLATE / CHR的解决方案的要求(我专注于OP的哀叹,因为它们卡在8i上),为了公平起见,我打算撤消我的回答并将其包括在其中。一,因为已被明确考虑。这是我写的:

您可以针对您的Oracle 8情况尝试使用TRANSLATE函数:

SELECT TRANSLATE(L,'A'||CHR(10)||CHR(9)||CHR(13),'A') FROM test;

0
投票

没有尝试,就做

SET TAB OFF

有想要的效果吗?

© www.soinside.com 2019 - 2024. All rights reserved.