从数据库查询时两个 Java 应用程序的行为不同

问题描述 投票:0回答:1

我有两个 Java 应用程序在同一服务器上运行,从同一个 Oracle DB 获取数据。数据实时更新。第一个应用程序直接从更新的表中读取数据,而第二个应用程序从 Oracle 视图中读取数据,从这些表中获取数据。这两个应用程序都通过以 250 毫秒间隔定期运行的线程获取数据。如果第一个应用程序获取 10 条记录,第二个应用程序也应该获取 10 条记录,但是会发生什么情况,第一个应用程序获取 10 条记录,而另一个应用程序获取 4 条记录,为什么会发生这种情况?

这是第一个应用程序的查询:

select  T.Id,   
    T.Index_Name,
    T.xIndex,
    T.NetChange,
    T.PrcntChange,
    T.to_char(IDXM_RCV_DT+NUMTODSINTERVAL(3,'HOUR') ,'YYYY/MM/DD HH24:MI:SS.FF3') local_time ,
    T.TradeVolume,
    T.TradeValue,
    T.TodayInitIndex,
    T.IndexHigh,
    T.IndexLow,
    T.YestCloseIndex,
    T.T.YestCloseAdjusted, 
    T.ChangeDir,
    I.IDXM_LI_TOT_TRAD_SYM totalSym,
    I.IDXM_LI_TOT_TRAD_NB||'' totalTrades,
    I.IDXM_LI_TOT_TRAD_QTY||'' totalQty,
    I.IDXM_LI_TOT_TRAD_VAL||'' totalValue
    from 
      Indices T, 
      tipowner.idxm I
    where 
      I.IDXM_IDX_ID=T.id 
      AND T.IDXM_RCV_DT > (to_timestamp('2023/08/03 16:47:23.496','YYYY/MM/DD HH24:MI:SS.FF3')-(3/24))

这是视图定义:

CREATE OR REPLACE VIEW vw_l_mkt_index (
  market,
  name_en,
  name_ar,
  msg_timestamp,
  status,
  index_value,
  change,
  change_percent,
  trades_count,
  traded_symbols,
  traded_value,
  traded_volume,
  rising_symbols,
  dropping_symbols,
  flat_symbols,
  open_time,
  close_time
) AS
SELECT /*+ INDEX(IDXM IX_IDXM_IDX_ID_RECV_DT) INDEX(T IX_TADAWUL_INDICES_TS) */
    I.IDXM_IDX_ID AS MARKET,
    I.IDXM_DESC AS NAME_EN,
    I.IDXM_ADESC AS NAME_AR,to_timestamp(to_char(I.IDXM_RCV_DT+NUMTODSINTERVAL(3,'HOUR'),'dd.mm.yy HH24:MI:SS.FF3'), 'dd.mm.yy HH24:MI:SS.FF3') AS MSG_TIMESTAMP,
    P.MKT_STATUS AS STATUS,
    T.XINDEX AS INDEX_VALUE,
    DECODE(T.CHANGEDIR, '-', (T.NETCHANGE * -1), T.NETCHANGE)AS CHANGE,
    DECODE(T.CHANGEDIR, '-', (T.PRCNTCHANGE * -1), T.PRCNTCHANGE) AS CHANGE_PERCENT,
    I.IDXM_LI_TOT_TRAD_NB || '' AS TRADES_COUNT,
    I.IDXM_LI_TOT_TRAD_SYM AS TRADED_SYMBOLS,
    I.IDXM_LI_TOT_TRAD_QTY || '' AS TRADED_VOLUME,
    I.IDXM_LI_TOT_TRAD_VAL || '' AS TRADED_VALUE,
    I.IDXM_LI_ADV_TRAD_SYM AS RISING_SYMBOLS,
    I.IDXM_LI_DEC_TRAD_SYM AS DROPPING_SYMBOLS,
    I.IDXM_LI_UNC_TRAD_SYM AS FLAT_SYMBOLS,
    TO_CHAR(M.MK_FROM, 'HH24:MI:SS') AS OPEN_TIME,
    TO_CHAR(M.MK_TO, 'HH24:MI:SS') AS CLOSE_TIME
  FROM IDXM I, INDICES T, PARAM P, MARKET M
  WHERE IDXM.IDXM_IDX_ID = T.ID
    AND M.MK_CODE (+)= IDXM.IDXM_IDX_ID
    AND IDXM.IDXM_IDX_ID <> 'NOMU'

两者都使用相同的Java版本,相同的驱动程序。

java resultset oracle19c
1个回答
0
投票

在您添加视图的定义之前,我发布了我的第一个答案,因此我将对其进行编辑。考虑到查询是在不同的表上,根据您拥有的数据,得到不同组结果是正常的,因此您需要对数据进行彻底的分析。

© www.soinside.com 2019 - 2024. All rights reserved.