【问题标题】:Remove leading spaces and the SQL> tags when spooling假脱机时删除前导空格和 SQL> 标记
【发布时间】:2015-01-02 21:23:29
【问题描述】:

我正在使用 SQL*Plus 使用以下代码进行导出:

Set echo off
Set verify off
Set feedback off
Set heading off
Set termout on
Set pages 50000 
Set linesize 1000
Set newpage none
Set colsep ","
spool Z:\ff\ss.csv
Select Client_ID, Cust_ID from cust; 
spool off;
exit;

我得到了正确的输出,但它没有最好的格式。

SQL> Select Client_ID, Cust_ID from cust; 
       100,200
       200,300
       300,400
       400,500
SQL>spool off;
  1. 如何去掉值前的空格?

    100,200

  2. 如何摆脱输出文件中的SQL> 语句?

【问题讨论】:

    标签: sql oracle formatting sqlplus spool


    【解决方案1】:

    试试这个选项: SET TRIMSPOOL ON 否则 spoolfile 中的每一行都被空白填充,直到达到 linesize。

    设置 TRIMOUT ON 否则输出中的每一行都用空白填充,直到达到 linesize。

    SET WRAP OFF 如果行长于 LINESIZE,则截断该行。如果 linesize 足够大,则不会发生这种情况。

    SET TERMOUT OFF 禁止将结果打印到输出。这些行仍被写入假脱机文件。这可能会大大加快语句的执行时间。

    【讨论】:

      【解决方案2】:

      如何去掉值前的空格?

      使用 TRIM。例如,

      SQL> SELECT TRIM(empno) eno FROM emp;
      
      ENO
      -------------------------------------
      7369
      7499
      7521
      7566
      7654
      7698
      7782
      7788
      7839
      7844
      7876
      7900
      7902
      7934
      
      14 rows selected.
      
      SQL>
      

      如何摆脱输出文件中的 SQL> 语句?

      最好的方法是使用 SILENT 选项-s

      例如,

      sqlplus -s scott/tiger@orcl
      

      来自documentation

      静音选项

      -S[ILENT]

      抑制所有SQL*Plus 信息和提示消息,包括命令提示符、命令回显和横幅 通常在您启动SQL*Plus 时显示。如果您省略用户名或 密码,SQL*Plus 提示输入,但提示不可见! 使用 SILENT 在另一个程序中调用 SQL*Plus,以便使用 的SQL*Plus 对用户是不可见的。

      SILENT 是在 CGI 脚本或操作系统中使用 SQLPLUS -MARKUP 命令为 Web 创建报告的有用模式 脚本。 SQL*Plus 横幅和提示被抑制并且不 出现在使用 SILENT 选项创建的报告中。

      或者,您也可以这样做:

      set sqlprompt ''
      

      例如,

      SQL> set sqlprompt ''
      select empno from emp;
      
           EMPNO
      ----------
            7369
            7499
            7521
            7566
            7654
            7698
            7782
            7788
            7839
            7844
            7876
            7900
            7902
            7934
      
      14 rows selected.
      

      因此,SQL> 提示符将被忽略。

      【讨论】:

        【解决方案3】:

        echo off 仅适用于从文件运行时删除 SQL> 提示。将您的命令放在一个名为 export_client_data.sql 的文件中并使用 @ 命令运行它们:

        SQL>@export_client_data.sql
        

        SQL*Plus 作为一种报告工具,会将输出格式化为表格中定义的列宽。因此,使用 TRIM() 并不总是按预期工作。例如,您将在宽度右侧看到一个 VARCHAR 列。

        通常要使用 SQL*Plus 创建数据提取,您可以像这样格式化查询,而无需修剪任何内容:

        Select Client_ID || ',' || Cust_ID from cust;
        

        【讨论】:

        • 最好使用silent 选项。
        【解决方案4】:

        一般的非 Oracle 答案:

        1. 使用 ISO/ANSI SQL 函数 TRIM(Client_ID) 删除前导(和尾随)空格。 (一些 DBMS 使用 LTRIM 进行引导。)

        2. 非标准的REPLACE函数可能会起作用,即REPLACE(Client_ID, 'SQL> ', '')

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-07-28
          • 1970-01-01
          • 1970-01-01
          • 2012-07-30
          • 1970-01-01
          • 1970-01-01
          • 2011-02-03
          相关资源
          最近更新 更多