Sql Db2/Oracle无法摆脱空间

Sql Db2/Oracle无法摆脱空间,sql,oracle11g,Sql,Oracle11g,管理层已决定从DB2LUV9迁移。致甲骨文11g 这是我创建的DB2查询,用于将一组数据(在bash脚本中)转储到一个带分隔符的文件中 数据输出看起来像这样漂亮整洁 2925917748|2003-12-05-17.26.58.000000|2013-11-03|36816426252|740||0|||||H25-500 3030176931|2004-11-07-11.48.52.000000|2013-11-03|25167455119|797||15|0|4|0|0|HR44-700 3

管理层已决定从DB2LUV9迁移。致甲骨文11g

这是我创建的DB2查询,用于将一组数据(在bash脚本中)转储到一个带分隔符的文件中

数据输出看起来像这样漂亮整洁

2925917748|2003-12-05-17.26.58.000000|2013-11-03|36816426252|740||0|||||H25-500
3030176931|2004-11-07-11.48.52.000000|2013-11-03|25167455119|797||15|0|4|0|0|HR44-700
3026464853|2004-11-07-12.40.54.000000|2013-11-03|25166398575|797||17|0|3|0|0|HR44-500
这是我创建的ORACLE查询,也是为了执行相同的操作(在bash脚本中)

数据输出是整个pplace的一堆前导/尾随空格(添加的R/LTRIM无效):

这是DB2表的DDL

                                Data type                     Column
Column name                     schema    Data type name      Length     Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
CAMID                           SYSIBM    BIGINT                       8     0 No
RID                             SYSIBM    BIGINT                       8     0 No
SOFTWAREVERSION                 SYSIBM    VARCHAR                     25     0 Yes
MODELNUMBER                     SYSIBM    VARCHAR                     25     0 Yes
MANUFACTURERID                  SYSIBM    VARCHAR                     25     0 Yes
POSTTIME                        SYSIBM    TIMESTAMP                   10     6 Yes
MODDATE                         SYSIBM    DATE                         4     0 No
NUMBEROFRESETSSINCELASTSWDL     SYSIBM    INTEGER                      4     0 Yes
IPINFO                          SYSIBM    VARCHAR                    100     0 Yes
TOTALNUMOFCOMPLETEDDLS          SYSIBM    BIGINT                       8     0 Yes
TOTALNUMBEROFDOWNLOADSSTARTED   SYSIBM    BIGINT                       8     0 Yes
DAILYDOWNLOADSIZE               SYSIBM    BIGINT                       8     0 Yes
DAILYDOWNLOADTIME               SYSIBM    BIGINT                       8     0 Yes
这是Oracle表的DDL

 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 CAMID                                     NOT NULL NUMBER
 RID                                       NOT NULL NUMBER
 SOFTWAREVERSION                                    VARCHAR2(25)
 MODELNUMBER                                        VARCHAR2(25)
 MANUFACTURERID                                     VARCHAR2(25)
 POSTTIME                                           TIMESTAMP(6)
 MODDATE                                   NOT NULL TIMESTAMP(0)
 NUMBEROFRESETSSINCELASTSWDL                        NUMBER
 IPINFO                                             VARCHAR2(100)
 TOTALNUMOFCOMPLETEDDLS                             NUMBER
 TOTALNUMBEROFDOWNLOADSSTARTED                      NUMBER
 DAILYDOWNLOADSIZE                                  NUMBER
 DAILYDOWNLOADTIME                                  NUMBER

我错过了什么?如何修复Oracle中的查询???

输出仍在列中,Oracle(或者更确切地说,SQL*Plus)不会删除每行值中的空白,因此即使您
修剪长度不同的字符串列,所有行也会以相同的宽度显示该列。它还增加了列宽以允许隐藏标题,这使事情变得更糟。例如,第二列的派生标题(如果显示的话)将是
LTRIM(RTRIM(TO_CHAR(A.POSTTIME,'YYYY-MM-DD-HH24.MI.SS.FF6'),'')
,因此即使所有的值都小于该值,该列也将显示为67个字符宽。您可以通过使用较短的名称对列进行别名来部分阻止这种情况,但最终还是会为空值使用空格

我发现,要真正像那样剥离所有内容,唯一的方法是手动将列与分隔符连接起来,从而生成一列输出:

SELECT DISTINCT
A.CAMID
  ||'|'|| TO_CHAR(A.POSTTIME,'YYYY-MM-DD-HH24.MI.SS.FF6')
  ||'|'|| TO_CHAR(A.MODDATE,'YYYY-MM-DD')
  ||'|'|| A.RID
  ||'|'|| A.SOFTWAREVERSION
  ||'|'|| B.IPINFO
  ||'|'|| B.NUMBEROFRESETSSINCELASTSWDL
  ||'|'|| C.TOTALNUMOFCOMPLETEDDLS
  ||'|'|| C.TOTALNUMBEROFDOWNLOADSSTARTED
  ||'|'|| C.DAILYDOWNLOADSIZE
  ||'|'|| C.DAILYDOWNLOADTIME
  ||'|'|| A.MODELNUMBER ||'-'|| A.MANUFACTURERID
FROM
STBHEADER A
JOIN
STBSTATUS B
ON A.DMS_ID=B.DMS_ID
AND
A.CAMID NOT IN (-11,125,117)
LEFT JOIN
BBVODSTATS C
ON A.DMS_ID=C.DMS_ID;

3030176931|2004-11-07-11.48.52.000000|2013-11-03|25167455119|797||15|0|4|0|0|HR44-700
3026464853|2004-11-07-12.40.54.000000|2013-11-03|25166398575|797||17|0|4|0|0|HR44-500
2925917748|2003-12-05-17.26.58.000000|2013-11-03|36816426252|740||0|||||H25-500

这不需要修剪值,但是如果您需要这样做,那么使用
trim
会更简单,而不是将
LTRIM
RTRIM
调用分开,默认情况下是删除空格-因此您可以只执行
trim(value)
,而不是
LTRIM(RTRIM(value.),“”)。(但直言不讳并不有害)。我还省略了
TO_CHAR
调用数值来简化事情,但是您可能更喜欢显式设置它们-在这种情况下,请注意
FM
格式修饰符

一些
SET
命令、
MAXD
NEWP
TRUNCATE
,另外一些命令不再需要了,尤其是
COLSEP
,因为现在输出中只有一列

如果您真的在输出中得到单词
null
,那么您必须在某个地方设置null
,可能在登录脚本中;这也不会出现在这个连接版本中,因为它应用于输出列(同样,只有一个,不能为null),而不是单个基础表列。

Alex,您“锁定了它”。删除TRIM()和大多数SET命令后,我得到了匹配的输出。然而,我的代码中没有设置NULL,但这是一个简单的修复方法。非常感谢。接受并投票通过。
                                Data type                     Column
Column name                     schema    Data type name      Length     Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
CAMID                           SYSIBM    BIGINT                       8     0 No
RID                             SYSIBM    BIGINT                       8     0 No
SOFTWAREVERSION                 SYSIBM    VARCHAR                     25     0 Yes
MODELNUMBER                     SYSIBM    VARCHAR                     25     0 Yes
MANUFACTURERID                  SYSIBM    VARCHAR                     25     0 Yes
POSTTIME                        SYSIBM    TIMESTAMP                   10     6 Yes
MODDATE                         SYSIBM    DATE                         4     0 No
NUMBEROFRESETSSINCELASTSWDL     SYSIBM    INTEGER                      4     0 Yes
IPINFO                          SYSIBM    VARCHAR                    100     0 Yes
TOTALNUMOFCOMPLETEDDLS          SYSIBM    BIGINT                       8     0 Yes
TOTALNUMBEROFDOWNLOADSSTARTED   SYSIBM    BIGINT                       8     0 Yes
DAILYDOWNLOADSIZE               SYSIBM    BIGINT                       8     0 Yes
DAILYDOWNLOADTIME               SYSIBM    BIGINT                       8     0 Yes
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 CAMID                                     NOT NULL NUMBER
 RID                                       NOT NULL NUMBER
 SOFTWAREVERSION                                    VARCHAR2(25)
 MODELNUMBER                                        VARCHAR2(25)
 MANUFACTURERID                                     VARCHAR2(25)
 POSTTIME                                           TIMESTAMP(6)
 MODDATE                                   NOT NULL TIMESTAMP(0)
 NUMBEROFRESETSSINCELASTSWDL                        NUMBER
 IPINFO                                             VARCHAR2(100)
 TOTALNUMOFCOMPLETEDDLS                             NUMBER
 TOTALNUMBEROFDOWNLOADSSTARTED                      NUMBER
 DAILYDOWNLOADSIZE                                  NUMBER
 DAILYDOWNLOADTIME                                  NUMBER
SELECT DISTINCT
A.CAMID
  ||'|'|| TO_CHAR(A.POSTTIME,'YYYY-MM-DD-HH24.MI.SS.FF6')
  ||'|'|| TO_CHAR(A.MODDATE,'YYYY-MM-DD')
  ||'|'|| A.RID
  ||'|'|| A.SOFTWAREVERSION
  ||'|'|| B.IPINFO
  ||'|'|| B.NUMBEROFRESETSSINCELASTSWDL
  ||'|'|| C.TOTALNUMOFCOMPLETEDDLS
  ||'|'|| C.TOTALNUMBEROFDOWNLOADSSTARTED
  ||'|'|| C.DAILYDOWNLOADSIZE
  ||'|'|| C.DAILYDOWNLOADTIME
  ||'|'|| A.MODELNUMBER ||'-'|| A.MANUFACTURERID
FROM
STBHEADER A
JOIN
STBSTATUS B
ON A.DMS_ID=B.DMS_ID
AND
A.CAMID NOT IN (-11,125,117)
LEFT JOIN
BBVODSTATS C
ON A.DMS_ID=C.DMS_ID;

3030176931|2004-11-07-11.48.52.000000|2013-11-03|25167455119|797||15|0|4|0|0|HR44-700
3026464853|2004-11-07-12.40.54.000000|2013-11-03|25166398575|797||17|0|4|0|0|HR44-500
2925917748|2003-12-05-17.26.58.000000|2013-11-03|36816426252|740||0|||||H25-500