oracle 12c 查询优化,Oracle Database 12c查询优化器的缺陷-视图合并会造成查询结果不准确...

最近在将一个11g的数据库导入到12c(12.1.0.2,并打了最新的补丁)的库后,测试人员反馈有一个SQL执行结果不正确。

具体的SQL如下:

SELECT *

FROM ( SELECT watnum,

agentcode,

managecom,

SUM (prem) AS prem,

SUM (charge) AS charge

FROM (SELECT ct.card_number,

ct.card_managecode,

cp.riskcode,

cp.riskname,

cp.prem,

csm.watnum,

csm.charge,

SUBSTR (csm.agentcode, 2) AS agentcode,

SUBSTR (csm.managecom, 2) AS managecom

FROM card_table@webapp ct,

ZZHCardSettleMent csm,

CARDPREMIUM@WEBAPP cp

WHERE ct.card_type = cp.cardtype

AND csm.idcard = ct.card_number

AND csm.checktype = 1

AND ct.card_managecode = ‘8602’)

GROUP BY watnum, agentcode, managecom) c

WHERE NOT EXISTS

(SELECT ‘Y’

FROM policyinfo

WHERE c.watnum = proposalcontno);

由于第一个子查询(我们姑且把它称为C子查询)涉及到DBLINK,所以一开始怀疑DBLINK不一致导致的。但是查看了DBLINK的配置后发现和源11g的配置是一样的,连的都是相同的数据库。

试着单独,在11g和12c中的执行结果是一样的!

接着试着把代替

SELECT *

FROM ctemp c

WHERE NOT EXISTS

(SELECT ‘Y’

FROM policyinfo

WHERE c.watnum = proposalcontno);

SELECT *

FROM cvtemp c

WHERE NOT EXISTS

(SELECT ‘Y’

FROM policyinfo

WHERE c.watnum = proposalcontno);

SELECT /*+ NO_MERGE(c) */ *

FROM cvtemp c

WHERE NOT EXISTS

(SELECT ‘Y’

FROM policyinfo

WHERE c.watnum = proposalcontno);

alter system set “_complex_view_merging”=false;

4ccf66bba21dd18056580b212eef2545.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值