3

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

我们过去使用 set trim on过,但它似乎并不适合我们现在需要的东西。我试图避免在 sql 查询中调用 oracle 的 translate、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 似乎不可用。:(

提前致谢。

4

2 回答 2

4

我认为您无法使用 SQL*Plus 指令来做到这一点。SQL*Plus 是一个非常瘦的客户端,它的设计目的不是接触来自结果集本身的数据。

如果您不想使用内置的 SQL 函数来修改输出,那么我认为您将无法对假脱机文件进行后处理。

由 DCookie 编辑:由于我错过了 OP 对基于非 TRANSLATE/CHR 的解决方案的原始请求(我专注于 OP 对他们坚持使用 8i 的感叹),为了公平起见 dpbradley 我将撤回我的答案并将其包括在内作为这个的一部分,因为它被明确考虑过。这是我写的:

您可以针对您的 Oracle 8 情况尝试 TRANSLATE 功能:

SELECT TRANSLATE(L,'A'||CHR(10)||CHR(9)||CHR(13),'A') FROM test;
于 2010-06-09T14:50:21.077 回答
0

不试就行

SET TAB OFF

有想要的效果吗?

于 2010-06-09T14:18:06.347 回答