ITPub博客

首页 > 数据库 > Oracle > oracle查询远程视图进行insert语句报错:ORA-00600: 错误 [qerrmOFBu1], [24347], []

oracle查询远程视图进行insert语句报错:ORA-00600: 错误 [qerrmOFBu1], [24347], []

原创 Oracle 作者:history_xcy 时间:2014-11-17 19:05:28 0 删除 编辑
今天开发提供了一个insert语句 在开发库上执行的时候居然报错: ORA-00600: 内部错误代码,参数: [qerrmOFBu1], [24347], [], [], [], [], [], []  有些诧异。
 
先描述一下环境:

生产环境:
服务器:AIX Version 7.1
数据库:Oracle Database 11g Release 11.2.0.3.0 - 64bit

开发环境:
服务器: 未知没有登陆权限
数据库:  Oracle9i Enterprise Edition Release 9.2.0.1.0

情况详细说明:
这句insert语句中使用了一个视图VIEW_HAITUO_CUST,而这个视图是在生产环境中,然后通过dblink进行查询 在插入到SSK_NEWSYS表中。
这里有一个细节,视图链接的dblink 读取的是dg2灾备库,具体情况是这样 我画图说明一下:


报错信息:

 
 
执行的sql语句:

点击(此处)折叠或打开

  1. INSERT INTO SSK_NEWSYS (SSBH, FZBH, KH,YWYH,SSMC,GSBH,JGDM,YGFS,GB,ZCDZ,YZBM,ZGZS,SXDB,/*SSDZ,LXRM,*/SSDH,E_MAIL,SSCZ,DWXZ)
  2. select i.SSBH,i.FZBH,i.KH,i.YWYH,i.SSMC,i.GSBH,i.JGDM,i.YGFS,i.GB,i.ZCDZ,i.YZBM,i.ZGZS,i.SXDB,/*i.SSDZ,i.LXRM,*/i.SSDH,i.E_MAIL,i.SSCZi.DWXZ
  3. from fwsb.VIEW_HAITUO_CUST@DB_shengchan_LINKI

视图的内容为:

点击(此处)折叠或打开

  1. CREATE OR REPLACE VIEW VIEW_HAITUO_CUST AS
  2. WITH ORTEMP AS (SELECT MAX(O.ORDER_ID) AS ORDERID, O.CUST_ID AS CUST_ID
  3. FROM CS_ORDER O
  4. WHERE EXISTS (SELECT 1 FROM CS_ORDER_ITEM I WHERE I.ORDER_ID = O.ORDER_ID AND I.OI_STATE = 4 AND I.EXECU_SUPP_ID = 999) GROUP BY O.CUST_ID)

  5. SELECT
  6. BCUST.BUSI_CUST_NO AS SSBH,ACCE.ACCE_NO AS FZBH,BO.CODE_ AS KH
  7. ,USERINFO.YWYH AS YWYH,BCUST.BUSI_CUST_NAME AS SSMC,
  8. CUST.TRA_IND_REG_NO AS GSBH,CUST.ORGA_CODE ASJGDM,
  9.  DECODE(CON.WAY_LAB, 1, \'W\', 2, \'K\', CON.WAY_LAB) AS YGFS,
  10.  CUST.NATIONALITY AS GB,
  11.  CUST.HEAD_OFFICE_REG_NAME AS ZCDZ,
  12.  BCUST.OFFICE_ADDR_POST_CODE AS YZBM,
  13.  NVL(CO.ZGZS, 0) AS ZGZS,
  14. CUST.STA_REP AS SXDB,
  15. BCUST.OFFICE_ADDR AS SSDZ,
  16.  CC.CONT_NAME AS LXRM,
  17.  BCUST.CUST_TEL AS SSDH,
  18.  BCUST.EMAIL AS E_MAIL,
  19.  BCUST.COM_FAX AS SSCZ,
  20.  CUST.COM_TYPE AS DWXZ
  21.  FROM ORTEMP OD
  22.  JOIN CS_CUST_INFO CUST
  23.  ON CUST.CUST_ID = OD.CUST_ID
  24.  JOIN CS_BUSI_CUST BCUST
  25.  ON BCUST.CUST_ID = CUST.CUST_ID
  26.  JOIN (SELECT translate(BU.LOGIN_NAME,\'0123456789\'||BU.LOGIN_NAME,\'0123456789\') AS YWYH,
  27.  BUR.BASE_USER_ROLE_ID,
  28.  BUR.ORG_ID,
  29.  BR.ROLE_ID
  30.  FROM BASE_USER BU
  31.  LEFT JOIN BASE_USER_ROLE BUR
  32. ON BUR.USER_ID = BU.USER_ID
  33.  LEFT JOIN BASE_ROLE BR
  34.  ON BR.ROLE_ID = BUR.ROLE_ID) USERINFO
  35.  ON BCUST.BUSI_REP_ID = USERINFO.BASE_USER_ROLE_ID
  36.  JOIN BASE_ORGANIZATION BO
  37.  ON BO.ORG_ID = USERINFO.ORG_ID
  38.  AND BO.ORG_STATE = 1
  39.  JOIN CS_CUST_CON CON
  40.  ON CON.CUST_ID = CUST.CUST_ID
  41.  AND CON.CS_DEP_CUST_ID = BCUST.BUSI_CUST_ID
  42.  AND CON.IS_EFFECT = 1
  43.  AND CON.CON_STATE = 3
  44.  JOIN CS_CON_ACCE ACCE
  45.  ON ACCE.CON_ID = CON.CUST_CON_ID
  46.  AND ACCE.IS_EFFECT = 1
  47.  LEFT JOIN (SELECT COUNT(DISTINCT O.UNIQ_NO) AS ZGZS, O.CON_ACCE_ID
  48.  FROM CS_ORDER O
  49.  GROUP BY O.CON_ACCE_ID) CO
  50.  ON CO.CON_ACCE_ID = ACCE.CON_ACCE_ID
  51.  LEFT JOIN (SELECT CUST_ID, CONT_NAME, CON_ACCE_ID
  52.  FROM (SELECT RANK() OVER(PARTITION BY CON_ACCE_ID ORDER BY ROWNUMS) AS RK,
  53.  CUST_ID,
  54.  CONT_NAME,
  55.  CON_ACCE_ID
  56.  FROM (SELECT CUST_ID,
  57.  CONT_NAME,
  58.  CON_ACCE_ID,
  59.  ROWNUM AS ROWNUMS
  60.  FROM (SELECT C.CUST_ID,
  61.  C.CONT_NAME,
  62.  AC.CON_ACCE_ID,
  63.  C.WHE_MAI_CON,
  64.  C.BUOP_ID
  65.  FROM BD_CRM_CONT C
  66.  JOIN CS_CUST_INFO CU
  67.  ON C.CUST_ID = CU.CUST_ID
  68. JOIN BD_CRM_QUO_INFO QUO
  69.  ON QUO.BUOP_ID = C.BUOP_ID
  70.  JOIN CS_CON_ACCE AC
  71.  ON QUO.QUO_INFO_ID = AC.QUO_ID
  72.  GROUP BY C.CUST_ID,
  73.  C.CONT_NAME,
  74.  AC.CON_ACCE_ID,
  75.  C.WHE_MAI_CON,
  76.  C.BUOP_ID
  77.  ORDER BY C.WHE_MAI_CON DESC)))
  78.  WHERE RK = 1) CC
  79.  ON CC.CUST_ID = CUST.CUST_ID
  80.  AND CC.CON_ACCE_ID = ACCE.CON_ACCE_ID
  81.  WHERE USERINFO.ROLE_ID IN (1426, 9831);


然后第一个想法就是在开发库中把dblink的视图创建成临时表方式,看看是否可行。
没有问题:
 
 
后来想到 开发环境的数据库是9I的 会不会是9I数据库和11G的dblink有不兼容的地方?
然后我又找了一个测试环境 环境的数据库版本为11G和生产相同,进行执行同样的操作,结果没有报错。

结论看来 是数据库版本不同的原因了,解决这个问题的方法只能在开发环境创建一个临时表 然后在进行插入了,但是这个问题实际上是 oralce的BUG 还是版本不同不兼容呢?
知道原因的大大们希望能给我解释一下。




































来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29479238/viewspace-1336606/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-02-10

  • 博文量
    10
  • 访问量
    191600