是否有任何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似乎不可用。 :(
提前感谢。
我认为您无法使用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;
没有尝试,就做
SET TAB OFF
有想要的效果吗?