删除前导空格和SQL>假脱机时的标签

时间:2014-11-06 11:26:19

标签: sql oracle formatting sqlplus spool

我使用以下代码使用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. 如何在值之前删除空格?

    100200

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

4 个答案:

答案 0 :(得分:2)

尝试以下选项: 将TRIMSPOOL设置为ON,否则假脱机文件中的每一行都将被填充为空白,直到达到行大小为止。

将TRIMOUT设置为ON,否则输出中的每一行都会被填充为空白,直到达到行大小为止。

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

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

答案 1 :(得分:1)

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

SQL>@export_client_data.sql

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

通常使用SQL * Plus创建提取,您可以像这样格式化查询,而不需要TRIM任何东西:

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

答案 2 :(得分:0)

一般,非Oracle回答:

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

  2. 非标准REPLACE功能可能有用,即REPLACE(Client_ID, 'SQL> ', '')

答案 3 :(得分:0)

  

如何在值之前摆脱空格?

使用 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

  

SILENT Option

     

-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>提示被忽略。