我有两个 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版本,相同的驱动程序。
在您添加视图的定义之前,我发布了我的第一个答案,因此我将对其进行编辑。考虑到查询是在不同的表上,根据您拥有的数据,得到不同组结果是正常的,因此您需要对数据进行彻底的分析。