Sql Db2/Oracle无法摆脱空间
管理层已决定从DB2LUV9迁移。致甲骨文11g 这是我创建的DB2查询,用于将一组数据(在bash脚本中)转储到一个带分隔符的文件中 数据输出看起来像这样漂亮整洁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
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