oracle 11g dblink 查询的bug --10053用处

   在oracle11g上,外网建的dblink访问内网,好奇怪的SQL,问题SQL在内网是可以的,在外网查不出数据。做为实验,把内网的数据同步到外网,然后查询,是可以的。最后通过调整SQL写法解决了问题。

问题SQL:

SELECT T.P_TYPE_CODE,

 

       T.TYPE_CODE TYPE_ID,
       T.TYPE_NAME,
        TYPE_CODE,
       0 STANDARD_CENT,
       '' REMARK,
       '' STD_COUNT,
       N.IS_CHECK
  FROM gg_SAFE_C_TYPE_NW T, gg_C_STANDARD_NW N
 WHERE T.TYPE_CODE = N.CHECK_NUMBER(+)
 START WITH T.TYPE_ID = '0'
CONNECT BY PRIOR T.TYPE_CODE = T.P_TYPE_CODE

 

       AND T.PROJECT_TYPE IN (1, 3);

 

调整后:       

 

select TT.P_TYPE_CODE,
       TT.TYPE_CODE TYPE_ID,
       TT.TYPE_NAME,
       TT.TYPE_CODE TYPE_CODE,
       0 STANDARD_CENT,
       '' REMARK,
       '' STD_COUNT,
       N.IS_CHECK
  from (SELECT *
          FROM gg_SAFE_C_TYPE_NW T
         START WITH T.TYPE_ID = '0'
        CONNECT BY PRIOR T.TYPE_CODE = T.P_TYPE_CODE
               and PROJECT_TYPE IN (1, 3)) TT,
       gg_C_STANDARD_NWN

 

 WHERE TT.TYPE_CODE = N.CHECK_NUMBER(+);

 

在外网的机器上做了10053,发现问题SQL经过查询转换后是错误的。

问题SQL查询转换后的结果,执行报错

 

SELECT "A1"."P_TYPE_CODE" "P_TYPE_CODE",
       "A1"."TYPE_CODE" "TYPE_ID",
       "A1"."TYPE_NAME" "TYPE_NAME",
       "A1"."TYPE_CODE" "TYPE_CODE",
       0 "STANDARD_CENT",
       '' "REMARK",
       '' "STD_COUNT",
       "A1"."IS_CHECK" "IS_CHECK"
  FROM ((SELECT "A4"."PROJECT_TYPE" "T_$$_PROJECT_TYPE",
                "A4"."P_TYPE_CODE"  "T_$$_P_TYPE_CODE",
                "A4"."TYPE_CODE"    "T_$$_TYPE_CODE",
                "A3"."CHECK_NUMBER" "N_$$_CHECK_NUMBER",
                "A3"."IS_CHECK"     "N_$$_IS_CHECK",
                "A4"."TYPE_CODE"    "TYPE_CODE",
                "A4"."TYPE_NAME"    "T_$$_TYPE_NAME"
           FROM "gg_c_TYPE_NW"@TO_aaa     "A4",
                "gg__STANDARD_NW"@TO_aaa "A3"
          WHERE "A4"."TYPE_CODE" = "A3"."CHECK_NUMBER"(+)
            AND "A4"."TYPE_ID" = '0') UNION ALL
        (SELECT "A6"."PROJECT_TYPE" "T_$$_PROJECT_TYPE",
                "A6"."P_TYPE_CODE"  "T_$$_P_TYPE_CODE",
                "A6"."TYPE_CODE"    "T_$$_TYPE_CODE",
                "A5"."CHECK_NUMBER" "N_$$_CHECK_NUMBER",
                "A5"."IS_CHECK"     "N_$$_IS_CHECK",
                "A6"."TYPE_CODE"    "TYPE_CODE",
                "A6"."TYPE_NAME"    "T_$$_TYPE_NAME"
           FROM "LCAMTEST"."connect$_by$_pump$_003"               "A7",
                "gg_C_TYPE_NW"@TO_aaa     "A6",
                "gg_C_STANDARD_NW"@TO_aaa "A5"
          WHERE "A6"."TYPE_CODE" = "A5"."CHECK_NUMBER"(+)
            AND "A7"."PRIOR T.TYPE_CODE " = "A6"."P_TYPE_CODE"
            AND ("A6"."PROJECT_TYPE" = 1 OR "A6"."PROJECT_TYPE" = 3))) "A1";

 

 

 

调整后的SQL,结果正确            

SELECT "A2"."P_TYPE_CODE" "P_TYPE_CODE",
       "A2"."TYPE_CODE" "TYPE_ID",
       "A2"."TYPE_NAME" "TYPE_NAME",
       "A2"."TYPE_CODE" "TYPE_CODE",
       0 "STANDARD_CENT",
       '' "REMARK",
       '' "STD_COUNT",
       "A1"."IS_CHECK" "IS_CHECK"
  FROM (SELECT "A8"."P_TYPE_CODE" "P_TYPE_CODE",
               "A8"."TYPE_CODE"   "TYPE_CODE",
               "A8"."TYPE_NAME"   "TYPE_NAME"
          FROM "PS_CSG_SAFE_CHECK_TYPE_NW"@TO_LCAM_ZCDEVELOP "A8"
         START WITH "A8"."TYPE_ID" = '0'
        CONNECT BY "A8"."P_TYPE_CODE" = PRIOR "A8"."TYPE_CODE"
               AND ("A8"."PROJECT_TYPE" = 1 OR "A8"."PROJECT_TYPE" = 3)) "A2",
       "PS_CSG_SAFE_CHECK_STANDARD_NW"@TO_LCAM_ZCDEVELOP "A1"
 WHERE "A2"."TYPE_CODE" = "A1"."CHECK_NUMBER"(+);

 

 

 

 

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值