代码之家  ›  专栏  ›  技术社区  ›  Tom

从spool中删除sqlplus \r\n \t

  •  3
  • Tom  · 技术社区  · 15 年前

    是否有要删除的SQL*PLUS命令 \r \n \t 从输出到spool文件的结果集?那就是“修剪”每一张唱片?

    我们已经用过 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;
    

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

    事先谢谢。

    2 回复  |  直到 15 年前
        1
  •  3
  •   DCookie    15 年前

    我觉得你不能用SQL PLUS指令。SQL 另外,它是一个非常瘦的客户机,并不是为接触结果集本身的数据而设计的。

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

    由dcookie编辑: 因为我错过了OP关于非翻译/基于chr的解决方案的最初请求(我关注的是OP对8i的抱怨),公平地说,我将撤回我的答案,并将其作为这一个问题的一部分,因为它得到了明确的考虑。我写的是:

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

    SELECT TRANSLATE(L,'A'||CHR(10)||CHR(9)||CHR(13),'A') FROM test;
    
        2
  •  0
  •   Mark Baker    15 年前

    不用试一试,是吗?

    SET TAB OFF
    

    有预期的效果吗?