• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yveJohn
V2EX  ›  程序员

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

  •  
  •   yveJohn · Dec 29, 2020 · 2953 views
    This topic created in 1990 days ago, the information mentioned may be changed or developed.

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

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

    @lordofhollows value 这个值没有空数据,而且如果是 value 存在 null 数据,为什么 plsql 能查询出正确结果呢?
    @huntcool001 是个好思路,我现在 oracle 的日志看能不能找到原因。
    tikazyq
        5
    tikazyq  
       Dec 30, 2020
    为啥不是刘德华?
    tutou
        6
    tutou  
       Dec 30, 2020
    @tikazyq 因为彦祖也秃了
    yveJohn
        7
    yveJohn  
    OP
       Dec 30, 2020
    @tikazyq #5 问题能解决你就是我心中的刘天王😭
    yveJohn
        8
    yveJohn  
    OP
       Dec 30, 2020
    @tutou #6 别说真话!!!
    cyrivlclth
        9
    cyrivlclth  
       Dec 30, 2020
    本吴彦祖提供一个思路,上次某人遇到这个问题是时区的原因...
    hodur
        10
    hodur  
       Dec 30, 2020
    我上次遇到这样的问题是因为字段映射错误,在 SUM(A.VALUE) 加个 alias 试试
    yveJohn
        11
    yveJohn  
    OP
       Dec 31, 2020
    @hodur #10 已验证不是这个问题.
    @cyrivlclth #9 时区问题顶多会导致数据不一致,而不会导致数据始终为 0 吧😭
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1167 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 372ms · UTC 23:14 · PVG 07:14 · LAX 16:14 · JFK 19:14
    ♥ Do have faith in what you're doing.