Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 11g PL/SQL查询背靠背运行,结果不同(不返回所有行)_Sql_Oracle_Select_Oracle11g - Fatal编程技术网

Oracle 11g PL/SQL查询背靠背运行,结果不同(不返回所有行)

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

因此,如果在同一个数据库上背靠背运行查询,则检索不同的结果。查询中的任何内容都没有更改,数据库中的任何内容都没有更改,并且所有行始终都在那里。我通常在当天的第一个查询中就注意到了这一点,接下来它将显示其余的行。有什么想法吗?我已经为此工作了好几天,但运气不好

版本:Oracle Database 11g Enterprise Edition 11.2.0.1.0版-64位生产

我不认为问题出在查询上,但我想我会把它包括进来以帮助隔离

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行。编辑:*所以我在后端运行查询的唯一原因是,它存在应用程序访问相同数据的问题报告中使用的是什么意思?报表服务器是否可能正在缓存以前运行的结果?我们有一个应用程序正在访问数据,它使用的查询就是我提供的查询。当我运行底层查询时,通常在当天第一次运行时会得到错误的结果,之后会得到正确的结果。因此,我能够将它与应用程序服务器隔离开来,并直接与数据库隔离开来。