Oracle 11g PL/SQL查询背靠背运行,结果不同(不返回所有行)
因此,如果在同一个数据库上背靠背运行查询,则检索不同的结果。查询中的任何内容都没有更改,数据库中的任何内容都没有更改,并且所有行始终都在那里。我通常在当天的第一个查询中就注意到了这一点,接下来它将显示其余的行。有什么想法吗?我已经为此工作了好几天,但运气不好 版本:Oracle Database 11g Enterprise Edition 11.2.0.1.0版-64位生产 我不认为问题出在查询上,但我想我会把它包括进来以帮助隔离Oracle 11g PL/SQL查询背靠背运行,结果不同(不返回所有行),sql,oracle,select,oracle11g,Sql,Oracle,Select,Oracle11g,因此,如果在同一个数据库上背靠背运行查询,则检索不同的结果。查询中的任何内容都没有更改,数据库中的任何内容都没有更改,并且所有行始终都在那里。我通常在当天的第一个查询中就注意到了这一点,接下来它将显示其余的行。有什么想法吗?我已经为此工作了好几天,但运气不好 版本:Oracle Database 11g Enterprise Edition 11.2.0.1.0版-64位生产 我不认为问题出在查询上,但我想我会把它包括进来以帮助隔离 SELECT stuff FROM datamartdbo
SELECT stuff
FROM datamartdbo.position_details e10010
INNER JOIN datamartdbo.fund_master e10002
ON (e10010.dmart_fund_id = e10002.dmart_fund_id)
INNER JOIN datamartdbo.security_details e10013
ON ( e10010.security_alias = e10013.security_alias
AND e10002.effective_date = e10013.effective_date
AND e10013.security_id NOT LIKE 'INTEREST ON CASHUSD%'
AND e10002.snapshot_id = e10013.snapshot_id)
LEFT OUTER JOIN
(SELECT fm.entity_id,
t.security_alias,
SUM (t.security_gain) - SUM (t.security_loss) tgainloss
FROM datamartdbo.fund_master fm
JOIN datamartdbo.trade_details t
ON fm.dmart_fund_id = t.dmart_fund_id
WHERE t.dmart_currency = 'BASE'
AND fm.entity_id IN (' an ENTITY ID here')
AND fm.effective_date BETWEEN 'Start DD-MON-YYYY'
AND 'End DD-MON-YYYY'
GROUP BY fm.entity_id, t.security_alias) gl
ON e10002.entity_id = gl.entity_id
AND e10010.security_alias = gl.security_alias
WHERE e10010.dmart_currency = 'BASE'
AND (e10010.mkt_val <> 0 OR UPPER (e10013.investment_type) = 'FUTURES')
AND e10010.local_book_value IS NOT NULL
AND e10002.entity_id IN ('an ENTITY ID here')
AND e10002.effective_date = 'End DD-MON-YYYY'
AND e10002.snapshot_id = 'DEFAULT'
很可能您正在查看更大结果集中的行子集。当ORACLE向客户机发送结果时,它会在配置为100、1000、10000条记录的通道中执行此操作 我的猜测是,你看了第一次或前几次这样的变化,就会发现它们在不同的跑步中有所不同。如果获取整个结果集,则需要检查它们是否相同,但如果未设置ORDER BY,ORACLE可以按任意顺序检索记录
尝试按构造添加订单,我希望它能解决这个问题。我想Oracle optimizer的行为有所不同。 您可以使用提示,例如-NO_MERGE,
或者尝试与materialize、inline而不是子查询一起使用是否使用sysdate进行任何日期计算?这可以解释在一天中不同时间运行时的不同结果。但原因可能有很多。顺便说一句,你是怎么运作这个网站的?您如何知道它没有返回所有行?此查询中没有sysdate,静态开始和停止日期。这张桌子根本没变,我知道里面的内容。我知道这听起来很疯狂…在你的示例中没有PL/SQL。是否有任何表实际是视图,其中可能包括可能会产生奇怪副作用的计算或调用函数?当结果不同时,是否会得到不同的执行计划?不幸的是,这个查询正在报表中使用,这是我现在在后端运行它的唯一原因。我在运行此查询时检索所有行,否则它将默认为我设置的50行。编辑:*所以我在后端运行查询的唯一原因是,它存在应用程序访问相同数据的问题报告中使用的是什么意思?报表服务器是否可能正在缓存以前运行的结果?我们有一个应用程序正在访问数据,它使用的查询就是我提供的查询。当我运行底层查询时,通常在当天第一次运行时会得到错误的结果,之后会得到正确的结果。因此,我能够将它与应用程序服务器隔离开来,并直接与数据库隔离开来。