假脱机文件中的列宽是预期宽度的 4 倍

问题描述 投票:0回答:1

我有一个包含这样脚本的脚本文件。

SET ECHO OFF
SET TERM OFF
SET LINESIZE 1500
SET PAGESIZE 0
SET TRIMSPOOL ON
SET COLSEP ''  
set headsep off
SET FEEDBACK OFF
SET HEADSETTING OFF
SET SHOW OFF
SPOOL D:\employee.TXT

SELECT RPAD(FIRSTNAME,20,' '),           
RPAD(LASTNAME,20,' '),               
RPAD(COMPANY,50,' '),                
RPAD(ADDRESS1,50,' '),           
RPAD(ADDRESS2,50,' '),           
RPAD(ADDRESS3,50,' '),           
RPAD(CITY,50,' '),               
RPAD(STATE,50,' ')              
FROM EmployeeDetails;
SPOOL OFF

EXIT;

上面的脚本预计会生成 20 个字符宽度的 FIRSTNAME、LASTNAME 等。但是这个脚本生成的文件包含 80 个字符的 FIRSTNAME 和 80 个字符的 LASTNAME、200 个字符的 COMPANY 等

此脚本在 QA 环境中按预期工作,但在 PROD 中未按预期工作。多个作业被配置为使用此格式,因此业务对更改分隔符不感兴趣。谁能建议这里发生了什么。

提前谢谢你。

亲切的问候,测试者 Shadow.

上面的脚本预计会生成 20 个字符宽度的 FIRSTNAME、LASTNAME 等。但是这个脚本生成的文件包含 80 个字符的 FIRSTNAME 和 80 个字符的 LASTNAME、200 个字符的 COMPANY 等。我们使用的是 sqlplus 版本 12.2

oracle file sqlplus spool
1个回答
0
投票

您可以为列表达式设置别名和格式:

COLUMN FIRSTNAME FORMAT A20
COLUMN LASTNAME FORMAT A20
COLUMN COMPANY FORMAT A50
COLUMN ADDRESS1 FORMAT A50
COLUMN ADDRESS2 FORMAT A50
COLUMN ADDRESS3 FORMAT A50
COLUMN CITY FORMAT A50
COLUMN STATE FORMAT A50

SELECT RPAD(FIRSTNAME,20,' ') AS FIRSTNAME,
RPAD(LASTNAME,20,' ') AS LASTNAME,
RPAD(COMPANY,50,' ') AS COMPANY,
RPAD(ADDRESS1,50,' ') AS ADDRESS1,
RPAD(ADDRESS2,50,' ') AS ADDRESS2,
RPAD(ADDRESS3,50,' ') AS ADDRESS3,
RPAD(CITY,50,' ') AS CITY,
RPAD(STATE,50,' ') AS STATE
FROM EmployeeDetails;

或者连接成一个字符串:

SELECT RPAD(FIRSTNAME,20,' ') ||
RPAD(LASTNAME,20,' ') ||
RPAD(COMPANY,50,' ') ||
RPAD(ADDRESS1,50,' ') ||
RPAD(ADDRESS2,50,' ') ||
RPAD(ADDRESS3,50,' ') ||
RPAD(CITY,50,' ') ||
RPAD(STATE,50,' ')
FROM EmployeeDetails;
© www.soinside.com 2019 - 2024. All rights reserved.