跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教各位吴彦祖一个问题:同一个 SQL, Java 和 plsql 的查询结果不一致.
未分類
28 12 月 2020

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

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

資深大佬 : yveJohn 4

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

  • 开发环境: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)

  • 資深大佬 : huntcool001

    Mysql 有 general log, PQ 应该也有类似的东西. 直接连上服务端看日志,看你的代码客户端发过来的查询语句是什么.

  • 資深大佬 : xuanbg

    value 是关键词,用“包一下

  • 資深大佬 : lordofhollows

    可能是因为有 value 为 null 的记录,可以试下:sum(nvl(a.value, 0))

  • 主 資深大佬 : yveJohn

    @xuanbg 只是个例子,实际上不是 value

    @lordofhollows value 这个值没有空数据,而且如果是 value 存在 null 数据,为什么 plsql 能查询出正确结果呢?
    @huntcool001 是个好思路,我现在 oracle 的日志看能不能找到原因。

  • 資深大佬 : tikazyq

    为啥不是刘德华?

  • 資深大佬 : tutou

    @tikazyq 因为彦祖也秃了

  • 主 資深大佬 : yveJohn

    @tikazyq #5 问题能解决你就是我心中的刘天王

  • 主 資深大佬 : yveJohn

    @tutou #6 别说真话!!!

  • 資深大佬 : cyrivlclth

    本吴彦祖提供一个思路,上次某人遇到这个问题是时区的原因…

  • 資深大佬 : hodur

    我上次遇到这样的问题是因为字段映射错误,在 SUM(A.VALUE) 加个 alias 试试

  • 主 資深大佬 : yveJohn

    @hodur #10 已验证不是这个问题.
    @cyrivlclth #9 时区问题顶多会导致数据不一致,而不会导致数据始终为 0 吧

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具