V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yveJohn
V2EX  ›  程序员

请教各位吴彦祖一个问题:同一个 SQL, Java 和 plsql 的查询结果不一致.

  •  
  •   yveJohn · 2020-12-29 19:26:59 +08:00 · 2294 次点击
    这是一个创建于 1459 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请不要吐槽使用的上古框架,这是公司的屎山项目,必须得用!!!

    • 开发环境:eclipse 2018.09

    • JDK 版本:JDK 1.8.0_181

    • orm 框架:ibatis 2.3.4

    • 数据库版本:Oracle 11g

    根据百度、谷歌查询的解决方案已排除以下问题:

    1. 程序和 plsql 连接的数据源不一致
    2. plsql 中存在未提交的数据
    3. ibatis 缓存导致

    SQL 语句因为公司行业敏感,不能放出来给大家看,大概类似下面的代码

    with TEMP_TABLE AS(
    	SELECT ITEM_CODE,ITEM_NAM·····
        FROM TABLE1
        WHERE ITEM_CODE = '***'
        ORDER BY ITEM_CODE
    )
    SELECT A.ITEM_LVL,A.MARK,B.ITEM_NAM,SUM(A.VALUE) VALUE
    FROM TABLE2 A
    LEFT JOIN TEMP_TABLE B ON A.ITEM_CODE = B.ITEM_CODE
    GROUP BY A.ITEM_LVL,A.MARK,B.ITEM_NAM
    

    具体的错误表现是程序中查询时VALUE始终为 0,但是把程序执行的 SQL 拿到 plsql 中执行VALUE存在值

    11 条回复    2020-12-31 09:54:33 +08:00
    huntcool001
        1
    huntcool001  
       2020-12-29 20:58:36 +08:00
    Mysql 有 general log, PQ 应该也有类似的东西. 直接连上服务端看日志,看你的代码客户端发过来的查询语句是什么.
    xuanbg
        2
    xuanbg  
       2020-12-29 21:16:09 +08:00
    value 是关键词,用``包一下
    lordofhollows
        3
    lordofhollows  
       2020-12-29 21:50:34 +08:00
    可能是因为有 value 为 null 的记录,可以试下:sum(nvl(a.value, 0))
    yveJohn
        4
    yveJohn  
    OP
       2020-12-30 00:00:34 +08:00 via Android
    @xuanbg 只是个例子,实际上不是 value

    @lordofhollows value 这个值没有空数据,而且如果是 value 存在 null 数据,为什么 plsql 能查询出正确结果呢?
    @huntcool001 是个好思路,我现在 oracle 的日志看能不能找到原因。
    tikazyq
        5
    tikazyq  
       2020-12-30 09:38:24 +08:00
    为啥不是刘德华?
    tutou
        6
    tutou  
       2020-12-30 09:52:21 +08:00
    @tikazyq 因为彦祖也秃了
    yveJohn
        7
    yveJohn  
    OP
       2020-12-30 11:29:41 +08:00
    @tikazyq #5 问题能解决你就是我心中的刘天王😭
    yveJohn
        8
    yveJohn  
    OP
       2020-12-30 11:30:28 +08:00
    @tutou #6 别说真话!!!
    cyrivlclth
        9
    cyrivlclth  
       2020-12-30 14:29:02 +08:00
    本吴彦祖提供一个思路,上次某人遇到这个问题是时区的原因...
    hodur
        10
    hodur  
       2020-12-30 15:51:24 +08:00
    我上次遇到这样的问题是因为字段映射错误,在 SUM(A.VALUE) 加个 alias 试试
    yveJohn
        11
    yveJohn  
    OP
       2020-12-31 09:54:33 +08:00
    @hodur #10 已验证不是这个问题.
    @cyrivlclth #9 时区问题顶多会导致数据不一致,而不会导致数据始终为 0 吧😭
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1111 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:51 · PVG 02:51 · LAX 10:51 · JFK 13:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.