日期:2014-05-17  浏览次数:20815 次

一个sql的问题, 在不同的机器上就报错, 很奇怪
SQL code
UPDATE TMPYSYSDWFXCAB8F44415 A
   SET F_DXMC002 = ' ', F_DXBH002 = ' '
 WHERE A.F_DXBH002 || A.F_FJNM NOT IN
       (SELECT DISTINCT C.F_DXBH002 || T.NM
          FROM TMPYSYSDWFXCAB8F44415 C,
               (SELECT MIN(B.F_FJNM) AS NM
                  FROM TMPYSYSDWFXCAB8F44415 B
                 WHERE B.F_DXBH002 = A.F_DXBH002) T)


在我的本地数据库上一点问题就没有
但是在客户的数据库上执行就报错, ORA-00904: 'A'.'F_DXBH002': 无效的标识符
啥原因呢
客户端都是10g, 不同的是服务器端, 他的是9i,我的是10g

------解决方案--------------------
两个环境的表结构是什么样子的呢?
------解决方案--------------------
肯定是环境问题检查一下客户的数据库是否有F_DXBH002
------解决方案--------------------
不同的是服务器端
==================
检查一下表结构,字段名称时候一致
------解决方案--------------------
你所执行的这个语句涉及到的表在两个服务器里面的结构和字段名是否都一样呢 ?

------解决方案--------------------
报错是之最后一行A.F_DXBH002的错误!在where语句里这些写好像数据库不能知道A代表啥意思!
------解决方案--------------------
两边表结构不一样的可能性最大
------解决方案--------------------
9i会有这种问题,这格式没有办法解决的,你只有升级到10g或者看看更高的9i补丁是否可行,再不行就只能修改实现方式了。
------解决方案--------------------
原因两点
1, A/B两表的F_DXBH002数据类型不一样
2, 客户端执行环境下所连服务器中的A表不存在F_DXBH002字段