【问题标题】:How to correct Select Spool in the BAT file如何更正 BAT 文件中的 Select Spool
【发布时间】:2019-01-24 23:15:12
【问题描述】:

我正在 Windows 服务器中编写一个 BAT 文件,它将连接到 oracle,选择输出将被假脱机到一个文件,输出文件将被放置到网络驱动器。

我已通过以下步骤完成此操作:
1)创建一个bat文件连接oracle并执行该文件。

sqlplus UserName/Password@Hostname:1555/Service_Name @SQL_Script_to_execute
copy generated_File_with_path network_location

2) 将选择查询放在 SQL 脚本中。

spool "path_to_the_saved_file";
set define off;
set heading off;
set linesize 30000;
select column_A||ColumnB|| columnC  from table;
spool off;
exit;

我可以在输出文件中提取查询结果,但格式非常不正确。

在最后一列末尾和几行空白行之后,我得到了很多额外的空间。

如何删除最后一列之后和空白行之间的这些多余空格?

PS:到目前为止,我已经完成了以下步骤

  • 删除了 SQL 脚本中的 linesize,以避免在最后一列之后出现多余的空格,但这会使输出文件变得更糟。 表格行不在一行中。
  • 添加了 set pagesize 50000,确实解决了这个问题,但仍然有几个空白行出现在 文件,因为表中的总行数约为 70000。
    • 我已经在使用查询作为选择 colA||栏B || colC 从表中避免空间问题。

【问题讨论】:

  • 这些列的数据类型是什么?是否是 CHAR(不是 VARCHAR2,而是 CHAR)?如果是这样,它的值将用空格填充到该列的总长度。会是这样吗?
  • 您是否尝试在脚本中包含 set pagesize 0 以删除空格?

标签: sql batch-file cmd oracle11g sqlplus


【解决方案1】:

代码似乎连接了三 (3) 个字段。如果字段中有空格,可以修剪。

select TRIM(column_A) || TRIM(ColumnB) || TRIM(columnC) from table;

如果所有三 (3) 个字段都没有,那么这将产生一个空行。

【讨论】:

  • 不,字段中没有空格。
【解决方案2】:

在最后一列结束后我得到了很多额外的空间,而且很少 空白行。

如何在最后一列之后删除这些多余的空格 空行之间?

一种简单的方法是在最后一列之后添加RTRIM 空格,如下所示。我刚刚将您的查询嵌入到外部查询中并删除了空格。

SELECT
    rtrim(col1)
FROM 
( SELECT
    column_a
    || columnb
    || columnc col1
FROM TABLE );

【讨论】:

  • 谢谢XING,我会尽快分享结果。
【解决方案3】:

在 sqlplus 中像下面这样使用它:

SET PAGES 0 TRIMSPOOL ON FEEDBACK OFF ECHO OFF TERMOUT OFF SERVEROUTPUT OFF VERIFY OFF
spool .\filename.txt
select column_A||ColumnB|| columnC  from table;
spool off
/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 2010-11-09
    • 2021-10-19
    • 2022-01-09
    • 2013-11-06
    • 2022-12-10
    相关资源
    最近更新 更多