创建 Materialized Query table 成功后 drop 说不存在

humanity 2011-03-07 01:16:41
DB2 V 9.7 创建 Materialized Query table 有时候是在创建完后 drop 时说 XXX is undefined name。其它的又正常。

我创建一个类似下面这样的 SQL,奇怪地是有一批每次执行都不出错,而这后面这种我只选中这 MIRCMV009 的执行都正常。
但把整个 SQL (都是创建 materialized query table 的)一起执行的话,后面像 MIRCMV009 的几个每次都说 xxx is undefined name,说是这个表不存在,但我反复地执行多次,从第二次开始这个表就已经存在了。不知道为什么每次都是 XXX 表不存在,但是后面的 create table ... as ... 并没有报错,而且之后我 refresh table ... 也是正常的,那我 commit 之后再运行完全相同的 SQL 它怎么会报告 XXX 表未报到呢?

我在 TOAD for DB2 和 DB2 Command Editor 里面执行都出这个错误,但表实际上创建了成功了。只是那个错误提示很奇怪。
而外一批也是创建类似的表,但不出错,对比了一下没看出什么不同。而且2批 SQL 分开执行就是不出错,混在一起一次执行就出错。

有没有人碰到过这个问题.

drop table MIRCMV009;
create table MIRCMV009 as(
select ...
from MIRCO0010 co
left join (
MIRCMV030 ref
join
(
select ...
from LNMLMS100
union all
select ...
from BLMBMS100
) ln
on ...
) on ...
join MIR000000 ts on co.EFF_DT = ts.CURR_PRCS_DT
)
DATA INITIALLY DEFERRED
REFRESH DEFERRED
;
refresh table MIRCMV009;
...全文
123 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
humanity 2011-03-08
  • 打赏
  • 举报
回复
现在每次执行 drop table 还是说表找不到,但实际上创建现在都是成功的,而且每次也都 commit 了。
它只是说 drop table 语句表找不到,后面 create table ... as 都是成功的。

偶尔 create table 不成功,真是怪事。昨天有一次没出错。不知道是不是 TOAD for DB2 客户端有 bug,把某个 warning 报告错了。
humanity 2011-03-07
  • 打赏
  • 举报
回复
一开始,我以前是 left join 不好,我换成 inner join 也是一样的。把那个 join ( a join b ) 换成子查询 join (select a.* from a join b ...) x 后也是一样的出错。

事实上每个查询都是有结果的,没有任何表时空的。
zhaojianmi1 2011-03-07
  • 打赏
  • 举报
回复
语句都一样,看不出区别
humanity 2011-03-07
  • 打赏
  • 举报
回复
前4条是一批,从不出错,后3条是一批,有时会出错在第2批,

一次执行7个表的,总是后面第2批出错,但只拿后面第2批一次执行或一条一条执行却从不出错。
humanity 2011-03-07
  • 打赏
  • 举报
回复

drop table MIR000000;
create table MIR000000 (CURR_PRCS_DT date);
--insert into MIR000000 values (date('2010-12-31'));
commit;

drop table MIRPSh001;
CREATE TABLE MIRPSH001 AS (
select s.LNMLMS100_IPKEY as LNMLMS100_IPKEY
, s.SEQ
, s.DUE_DT
, coalesce(s.INST_AMT, 0) as INST_AMT
, coalesce(s.PRIN_AMT, 0) as PRIN_AMT
, coalesce(s.INT_AMT, 0) as INT_AMT
, coalesce(s.TAX_AMT, 0) as TAX_AMT
, coalesce(h.PAID_P, 0) as PAID_P
, coalesce(h.PAID_I, 0) as PAID_I
, coalesce(h.PAID_O, 0) as PAID_O
, coalesce(h.PAID_F, 0) as PAID_F
, coalesce(h.PAID_R, 0) as PAID_R
, coalesce(h.PAID_T, 0) as PAID_T
, h.MIN_VAL_DT
, h.MAX_VAL_DT
, h.MIN_TX_DT
, h.MAX_TX_DT
from LNMPSH100 s
left join (
select h.LNMLMS100_IPKEY, h.LNMPSH100_SEQ
, sum(case when h.PAY_CAT = 'P' then coalesce(h.CR_AMT, 0) - coalesce(h.DR_AMT, 0) else 0 end) as PAID_P
, sum(case when h.PAY_CAT = 'I' then coalesce(h.CR_AMT, 0) - coalesce(h.DR_AMT, 0) else 0 end) as PAID_I
, sum(case when h.PAY_CAT = 'O' then coalesce(h.CR_AMT, 0) - coalesce(h.DR_AMT, 0) else 0 end) as PAID_O
, sum(case when h.PAY_CAT = 'F' then coalesce(h.CR_AMT, 0) - coalesce(h.DR_AMT, 0) else 0 end) as PAID_F
, sum(case when h.PAY_CAT = 'R' then coalesce(h.CR_AMT, 0) - coalesce(h.DR_AMT, 0) else 0 end) as PAID_R
, sum(case when h.PAY_CAT = 'T' then coalesce(h.CR_AMT, 0) - coalesce(h.DR_AMT, 0) else 0 end) as PAID_T
, min(h.VAL_DT) MIN_VAL_DT
, max(h.VAL_DT) MAX_VAL_DT
, min(h.TX_DT) MIN_TX_DT
, max(h.TX_DT) MAX_TX_DT
from LNMPHS100 h
left join LNMPHS100 r on h.LNMLMS100_IPKEY = r.LNMLMS100_IPKEY and h.TX_NO = r.TX_NO and r.REV_IND = 1
where h.DEL_IND = 0 and r.IPKEY is null and h.LNMPSH100_SEQ > 0
group by h.LNMLMS100_IPKEY, h.LNMPSH100_SEQ
) h on s.LNMLMS100_IPKEY = h.LNMLMS100_IPKEY and h.LNMPSH100_SEQ = s.SEQ
where s.DEL_IND = 0
) DATA INITIALLY DEFERRED
REFRESH DEFERRED
;

refresh table MIRPSH001;
create index MIRPSH0011 on MIRPSH001(LNMLMS100_IPKEY, SEQ);

drop table MIRPHS001;
create table MIRPHS001 as (
select h.LNMLMS100_IPKEY, h.LN_NO, h.TX_NO, h.TX_TYP_CODE, h.LNMPSH100_SEQ
, max(h.TTL_AMT) as TTL_AMT
, sum(case when h.PAY_CAT = 'P' then coalesce(h.CR_AMT, 0) - coalesce(h.DR_AMT, 0) else 0 end) as PAID_P
, sum(case when h.PAY_CAT = 'I' then coalesce(h.CR_AMT, 0) - coalesce(h.DR_AMT, 0) else 0 end) as PAID_I
, sum(case when h.PAY_CAT = 'O' then coalesce(h.CR_AMT, 0) - coalesce(h.DR_AMT, 0) else 0 end) as PAID_O
, sum(case when h.PAY_CAT = 'F' then coalesce(h.CR_AMT, 0) - coalesce(h.DR_AMT, 0) else 0 end) as PAID_F
, sum(case when h.PAY_CAT = 'R' then coalesce(h.CR_AMT, 0) - coalesce(h.DR_AMT, 0) else 0 end) as PAID_R
, sum(case when h.PAY_CAT = 'T' then coalesce(h.CR_AMT, 0) - coalesce(h.DR_AMT, 0) else 0 end) as PAID_T
, max(coalesce(r.REV_IND, 0)) as REV_IND
, max(h.VAL_DT) as VAL_DT
, max(h.TX_DT) as TX_DT
, max(r.TX_DT) as REV_DT
from LNMPHS100 h
left join LNMPHS100 r on h.LNMLMS100_IPKEY = r.LNMLMS100_IPKEY and h.TX_NO = r.TX_NO and r.REV_IND = 1
where h.DEL_IND = 0
group by h.LNMLMS100_IPKEY, h.LN_NO, h.TX_NO, h.TX_TYP_CODE, h.LNMPSH100_SEQ

) DATA INITIALLY DEFERRED
REFRESH DEFERRED
;

refresh table MIRPHS001;
create index MIRPHS0011 on MIRPHS001(LNMLMS100_IPKEY, TX_NO);


drop table MIRAIT001;
create table MIRAIT001 as (
select comcoi000.REF, comait000.ASSET_REF, comatg000.ATR_GRP_NAME, comatr000.ATR_CODE
, COMATR000.DATA_TYP, COMATR000.FRMT
, CODAIT020.STR_VAL, CODAIT020.INT_VAL, CODAIT020.DEC_VAL
, CODAIT020.DT_VAL, codait020.TM_VAL
, CODAIT020.CCY_CODE, CODAIT020.CCY_AMT
, CODAIT020.COADR000_IPKEY, CODAIT020.CONAM000_IPKEY, CODAIT020.COPHO000_IPKEY
, COMATG000.SEQ as ATR_GRP_SEQ
, CODATG010.SEQ as ATR_SEQ
from COMCOI000
join COMAIT000 on comait000.COCOI000_IPKEY = comcoi000.IPKEY and comait000.DEL_IND = 0
join CODAIT020 on codait020.COAIT000_IPKEY = comait000.IPKEY and codait020.DEL_IND = 0
join CODATG010 on codatg010.IPKEY = CODAIT020.COATG010_IPKEY and codatg010.DEL_IND = 0
join COMATG000 on CODATG010.COATG000_IPKEY = comatg000.IPKEY and comatg000.DEL_IND = 0
join COMATR000 on codatg010.COATR000_IPKEY = comatr000.IPKEY and COMATR000.DEL_IND = 0
where comcoi000.DEL_IND = 0
)
DATA INITIALLY DEFERRED
REFRESH DEFERRED
;
refresh table MIRAIT001;

drop table MIRDOI001;
create table MIRDOI001 as (
select comcoi000.REF, comdoi000.REF as DOC_REF, CODDOT010.DOT_GRP_CODE, comatr000.ATR_CODE
, COMATR000.DATA_TYP, COMATR000.FRMT
, CODDOI010.STR_VAL, CODDOI010.INT_VAL, CODDOI010.DEC_VAL
, CODDOI010.DT_VAL, CODDOI010.TM_VAL
, CODDOI010.CCY_CODE, CODDOI010.CCY_AMT
, CODDOI010.COADR000_IPKEY, CODDOI010.CONAM000_IPKEY, CODDOI010.COPHO000_IPKEY
, CODDOT010.SEQ as ATR_GRP_SEQ
, CODDOT020.SEQ as ATR_SEQ
from COMCOI000
join comdoi000 on comdoi000.COCOI000_IPKEY = comcoi000.IPKEY and comdoi000.DEL_IND = 0
join CODDOI010 on CODDOI010.CODOI000_IPKEY = comdoi000.IPKEY and CODDOI010.DEL_IND = 0
join CODDOT020 on CODDOT020.IPKEY = CODDOI010.CODOT020_IPKEY and CODDOT020.DEL_IND = 0
join CODDOT010 on CODDOT020.CODOT010_IPKEY = CODDOT010.IPKEY and CODDOT010.DEL_IND = 0
join COMATR000 on CODDOT020.COATR000_IPKEY = comatr000.IPKEY and COMATR000.DEL_IND = 0
where comcoi000.DEL_IND = 0
)
DATA INITIALLY DEFERRED
REFRESH DEFERRED
;
refresh table MIRDOI001;

drop table MIRLMS001;
create table MIRLMS001 as (
select ln.*
, round(ln.FIN_AMT * r.BOOK_RATE, 2) as FIN_LCY
, round(ln.OS_BAL * r.BOOK_RATE, 2) as OS_LCY
from (
select ln.IPKEY as LNMLMS100_IPKEY, ln.LN_NO, ln.CIF_NO, ln.CIF_GP, ln.CCY_CODE
, ln.FIN_AMT, ln.OS_BAL, ln.RATE_CODE, ln.ALL_IN_RATE, ln.RATE_TYP, ln.LN_TYP, ln.NEXT_DUE_DT
, ln.TENOR, ln.PAID_TENOR, ln.COMING_DUE_SEQ, ln.STS, ln.CR_LINE_CODE
, ln.LN_CRT_DT, ln.LN_STR_DT, ln.MAT_DT, ln.PRIN_FIRST_PAY_DT, ln.FIRST_PAY_DT
, ln.DUE_DAY
, ln.CRT_DT, ln.LN_TYP_CAT, ln.LOAN_SCORE_STR
, ln.DEL_IND
from LNMLMS100 ln
where ln.DEL_IND = 0 and ln.STS >= '500'
) ln
left join (
CLMCRF0L0 line
join CLMCRFTP0 f on line.FACILITY_TYP = f.FACILITY_TYP and f.DEL_IND = 0
) on ln.CIF_NO = line.INDI_CIF_NO and ln.CR_LINE_CODE = line.LINE_REF
left join (
CMP004000 r
join MIR000000 ts on r.EFF_DT = ts.CURR_PRCS_DT
) on ln.CCY_CODE = r.CCY_CODE
)
DATA INITIALLY DEFERRED
REFRESH DEFERRED
;
refresh table MIRLMS001;

drop table MIRLMS002;
create table MIRLMS002 as (
select ln.LN_NO, ln.CIF_NO, ln.CIF_GP, ln.CR_LINE_CODE as LINE_REF
, ln.CCY_CODE, ln.FIN_AMT, ln.OS_BAL
, round(ln.FIN_AMT * r.BOOK_RATE, 2) as FIN_LCY
, round(ln.OS_BAL * r.BOOK_RATE, 2) as OS_LCY
, coalesce(npl.PROVISION_AMT, 0) as PROVISION_AMT
, coalesce(round(npl.PROVISION_AMT * r.BOOK_RATE, 2), 0) as PROVISION_LCY
, sum(coalesce(round(npl.PROVISION_AMT * r.BOOK_RATE, 2), 0))
over() GRAND_PROVISION_TOTAL
from (
select LN_NO, CIF_NO, CIF_GP, CR_LINE_CODE, CCY_CODE, FIN_AMT, OS_BAL
from LNMLMS100
where DEL_IND = 0 and OS_BAL > 0
union
select BILLS_REF, CIF_NO, CIF_GP, CR_LINE_CODE, CCY_CODE, BILLS_AMT, OS_BAL
from BLMBMS100
where DEL_IND = 0 and OS_BAL > 0
) ln
left join CLMNPLPA0 npl on
(
( (ln.CIF_GP is null or ln.CIF_GP = '') and ln.CIF_NO = npl.CIF_NO)
or ln.CIF_GP = npl.CIF_NO
) and ln.CR_LINE_CODE = npl.LINE_REF
left join (
CMP004000 r
join MIR000000 ts on r.EFF_DT = ts.CURR_PRCS_DT
) on ln.CCY_CODE = r.CCY_CODE
)
DATA INITIALLY DEFERRED
REFRESH DEFERRED
;
refresh table MIRLMS002;

drop table MIRCMV009;
create table MIRCMV009 as(
select co.CO_REF, co.CMV_LCY
, ln.SYS_REF, ref.CMV_LCY as CMV_USED
, sum(coalesce(ref.CMV_LCY, 0)) over (partition by co.CO_REF) CMV_USED_TOTAL
from MIRCO0010 co
left join (
MIRCMV030 ref
join
(
select CIF_NO, CR_LINE_CODE, LN_NO as SYS_REF
from LNMLMS100
where DEL_IND = 0 and STS >= '500' and STS < '999'
union all
select CIF_NO, CR_LINE_CODE, BILLS_REF as SYS_REF
from BLMBMS100
where DEL_IND = 0
) ln
on ref.INDI_CIF_NO = ln.CIF_NO and ref.LINE_REF = ln.CR_LINE_CODE

) on co.CO_REF = ref.CO_REF and co.EFF_DT = ref.EFF_DT
join MIR000000 ts on co.EFF_DT = ts.CURR_PRCS_DT
)
DATA INITIALLY DEFERRED
REFRESH DEFERRED
;
refresh table MIRCMV009;

commit;
humanity 2011-03-07
  • 打赏
  • 举报
回复
搞错了,确实创建失败,但没说 create table 那句出错。只是前面那句 drop table 出错。


难道创建一个 materialized query table 时它的查询没有结果是就不创建这个表也不报错?
有一次我得到 SQL0198N 错误,但后来又没出现我就当它成功了,但我拿一个表的来测试也不出错。
后来 SQL0198N 再也没出错,我估计它应该出这个错,但不知道为什么没报告出错。结果是没创建成功但也没说创建那个 SQL 出错。
zhaojianmi1 2011-03-07
  • 打赏
  • 举报
回复
搞不懂

就像你叫城市边缘的狼,头像明明是一只鸟[Quote=引用 2 楼 humanity 的回复:]
对呀,按理第二次正常,而且我拿出 2 批中的任何一批(第批创建3个表,都是这种类型的)来一次执行都是正确的,全部一次执行就总说第二批的3个表都不存在。我单独拿第2批三个表的一次执行也不报错。真是灵异事件啊。
[/Quote]
humanity 2011-03-07
  • 打赏
  • 举报
回复
实际上每次创建都是成功的,但删除老提示不存在,实际上上次删除+创建都是成功的。

[Quote=引用 1 楼 zhaojianmi1 的回复:]

第一次,数据库里不存在MIRCMV009,所以你的第一句drop table语句报表不存在
而后面的create等语句能够正常。

第二次,数据库一已经创建了表MIRCMV009(第一次创建的),所以drop table不报错
drop完之后,数据库里不存在表MIRCMV009,所以创建表能够成功。

不知道我说的是不是楼主的情况
[/Quote]
humanity 2011-03-07
  • 打赏
  • 举报
回复
对呀,按理第二次正常,而且我拿出 2 批中的任何一批(第批创建3个表,都是这种类型的)来一次执行都是正确的,全部一次执行就总说第二批的3个表都不存在。我单独拿第2批三个表的一次执行也不报错。真是灵异事件啊。
zhaojianmi1 2011-03-07
  • 打赏
  • 举报
回复
第一次,数据库里不存在MIRCMV009,所以你的第一句drop table语句报表不存在
而后面的create等语句能够正常。

第二次,数据库一已经创建了表MIRCMV009(第一次创建的),所以drop table不报错
drop完之后,数据库里不存在表MIRCMV009,所以创建表能够成功。

不知道我说的是不是楼主的情况

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧