使用coalesce()后的奇怪问题 [英] Strange problem after use coalesce()

查看:100
本文介绍了使用coalesce()后的奇怪问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们在windows上使用db2 v8.2 EE,使用jcc驱动程序。尝试创建

a加入视图,之后我检查syscat.columns表,对于那些

十进制字段使用COALESCE方法,所有长度变为11而不是

表中字段的实际长度,任何人都可以解释这个吗?
我?谢谢


创建视图ML101PD.ARJMBAL1(ARNM05,ARNO01,ARNM01,ARNO07,ARNO08,

ARNO09,ARFL17,ARFL03,ARMO12,ARDY12,ARCC12, ARYR12,ARNO15,

systimestamp,loginname,id)选择ML101PD.ARPMCUS.ARNM05,

ML101PD.ARPMCUS.ARNO01,ML101PD.ARPMCUS.ARNM01,ML101PD.ARPMCUS。 ARNO07,

ML101PD.ARPMCUS.ARNO08,ML101PD.ARPMCUS.ARNO09,

COALESCE(ML101PD.ARPMBAL.ARFL17,'''),COALESCE(ML101PD.ARPMBAL。 ARFL03,

'''',COALESCE(ML101PD.ARPMBAL.ARMO12,0),

COALESCE(ML101PD.ARPMBAL.ARDY12,0),COALESCE(ML101PD。 ARPMBAL.ARCC12,

0),COALESCE(ML101PD.ARPMBAL.ARYR12,0),

COALESCE(ML101PD.ARPMBAL.ARNO15,0),ML101PD.ARPMBAL.systimestamp ,
$ ML $ b来自ML101PD.ARPMCUS的ML101PD.ARPMBAL.loginname,COALESCE(ML101PD.ARPMCUS.id,

ML101PD.ARPMBAL.id)在

ML101PD.ARPMCUS.ARNO01 = ML101PD.ARPMBAL.ARNO01其中

((ML101PD.ARPMBAL .ARFL03 =''Y''))和((ML101PD.ARPMBAL.ARFL17<>''C''))

we are using db2 v8.2 EE on windows, with jcc driver. try to create
a join view, after that i check the syscat.columns table, for those
decimal field use COALESCE method, all the length become 11 instead of
the actual length of the field inside table, can anyone explain this to
me ? thank you

create view ML101PD.ARJMBAL1 (ARNM05, ARNO01, ARNM01, ARNO07, ARNO08,
ARNO09, ARFL17, ARFL03, ARMO12, ARDY12, ARCC12, ARYR12, ARNO15,
systimestamp, loginname, id ) as select ML101PD.ARPMCUS.ARNM05,
ML101PD.ARPMCUS.ARNO01, ML101PD.ARPMCUS.ARNM01, ML101PD.ARPMCUS.ARNO07,
ML101PD.ARPMCUS.ARNO08, ML101PD.ARPMCUS.ARNO09,
COALESCE(ML101PD.ARPMBAL.ARFL17, '' ''), COALESCE(ML101PD.ARPMBAL.ARFL03,
'' ''), COALESCE(ML101PD.ARPMBAL.ARMO12, 0),
COALESCE(ML101PD.ARPMBAL.ARDY12, 0), COALESCE(ML101PD.ARPMBAL.ARCC12,
0), COALESCE(ML101PD.ARPMBAL.ARYR12, 0),
COALESCE(ML101PD.ARPMBAL.ARNO15, 0), ML101PD.ARPMBAL.systimestamp,
ML101PD.ARPMBAL.loginname, COALESCE(ML101PD.ARPMCUS.id,
ML101PD.ARPMBAL.id ) from ML101PD.ARPMCUS left join ML101PD.ARPMBAL on
ML101PD.ARPMCUS.ARNO01 = ML101PD.ARPMBAL.ARNO01 where
((ML101PD.ARPMBAL.ARFL03=''Y'')) and ((ML101PD.ARPMBAL.ARFL17<>''C''))

推荐答案

看起来这是默认行为。从第1卷的第115页开始,

SQL参考:


操作数1:DECIMAL(w,x)

操作数2 :DECIMAL(y,z)

结果:DECIMAL(p,s)其中p = max(x,z)+ max(wx,yz)1s = max(x,z)


也许RTRIM是有序的。


- 杰夫


db2group88写道:
Looks like this is the default behavior. From page 115 of volume 1 of
the SQL Reference:

Operand 1: DECIMAL(w,x)
Operand 2: DECIMAL(y,z)
Result: DECIMAL(p,s) where p = max(x,z)+max(w-x,y-z)1s = max(x,z)

Perhaps an RTRIM is in order.

--Jeff

db2group88 wrote:

我们在windows上使用db2 v8.2 EE,使用jcc驱动程序。尝试创建

a加入视图,之后我检查syscat.columns表,对于那些

十进制字段使用COALESCE方法,所有长度变为11而不是

表中字段的实际长度,任何人都可以解释这个吗?
我?谢谢


创建视图ML101PD.ARJMBAL1(ARNM05,ARNO01,ARNM01,ARNO07,ARNO08,

ARNO09,ARFL17,ARFL03,ARMO12,ARDY12,ARCC12, ARYR12,ARNO15,

systimestamp,loginname,id)选择ML101PD.ARPMCUS.ARNM05,

ML101PD.ARPMCUS.ARNO01,ML101PD.ARPMCUS.ARNM01,ML101PD.ARPMCUS。 ARNO07,

ML101PD.ARPMCUS.ARNO08,ML101PD.ARPMCUS.ARNO09,

COALESCE(ML101PD.ARPMBAL.ARFL17,'''),COALESCE(ML101PD.ARPMBAL。 ARFL03,

'''',COALESCE(ML101PD.ARPMBAL.ARMO12,0),

COALESCE(ML101PD.ARPMBAL.ARDY12,0),COALESCE(ML101PD。 ARPMBAL.ARCC12,

0),COALESCE(ML101PD.ARPMBAL.ARYR12,0),

COALESCE(ML101PD.ARPMBAL.ARNO15,0),ML101PD.ARPMBAL.systimestamp ,
$ ML $ b来自ML101PD.ARPMCUS的ML101PD.ARPMBAL.loginname,COALESCE(ML101PD.ARPMCUS.id,

ML101PD.ARPMBAL.id)在

ML101PD.ARPMCUS.ARNO01 = ML101PD.ARPMBAL.ARNO01其中

((ML101PD.ARPMBAL。 ARFL03 =''Y''))和((ML101PD.ARPMBAL.ARFL17<>''C''))
we are using db2 v8.2 EE on windows, with jcc driver. try to create
a join view, after that i check the syscat.columns table, for those
decimal field use COALESCE method, all the length become 11 instead of
the actual length of the field inside table, can anyone explain this to
me ? thank you

create view ML101PD.ARJMBAL1 (ARNM05, ARNO01, ARNM01, ARNO07, ARNO08,
ARNO09, ARFL17, ARFL03, ARMO12, ARDY12, ARCC12, ARYR12, ARNO15,
systimestamp, loginname, id ) as select ML101PD.ARPMCUS.ARNM05,
ML101PD.ARPMCUS.ARNO01, ML101PD.ARPMCUS.ARNM01, ML101PD.ARPMCUS.ARNO07,
ML101PD.ARPMCUS.ARNO08, ML101PD.ARPMCUS.ARNO09,
COALESCE(ML101PD.ARPMBAL.ARFL17, '' ''), COALESCE(ML101PD.ARPMBAL.ARFL03,
'' ''), COALESCE(ML101PD.ARPMBAL.ARMO12, 0),
COALESCE(ML101PD.ARPMBAL.ARDY12, 0), COALESCE(ML101PD.ARPMBAL.ARCC12,
0), COALESCE(ML101PD.ARPMBAL.ARYR12, 0),
COALESCE(ML101PD.ARPMBAL.ARNO15, 0), ML101PD.ARPMBAL.systimestamp,
ML101PD.ARPMBAL.loginname, COALESCE(ML101PD.ARPMCUS.id,
ML101PD.ARPMBAL.id ) from ML101PD.ARPMCUS left join ML101PD.ARPMBAL on
ML101PD.ARPMCUS.ARNO01 = ML101PD.ARPMBAL.ARNO01 where
((ML101PD.ARPMBAL.ARFL03=''Y'')) and ((ML101PD.ARPMBAL.ARFL17<>''C''))


所以你做rtrim (COALESCE(ML101PD.ARPMBAL.ARMO12,0))?

so you do rtrim(COALESCE(ML101PD.ARPMBAL.ARMO12, 0))?


rtrim()用于字符串,它如何用于decmial字段?谢谢

rtrim() is for string, how it works for decmial field? thanks


这篇关于使用coalesce()后的奇怪问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆