2017-12-29 31 views
2

Oracle 12c에서 실행되는 2 개의 동일한 데이터베이스가 있습니다. 그들은 2 개의 다른 서버에 앉아 있습니다.SQL 쿼리가 서로 다른 두 시스템의 동일한 Oracle 데이터베이스에서 다른 결과를 반환합니다.

두 데이터베이스에서 SQL Developer를 사용하여 다음 쿼리를 실행하고 있습니다.

select * 
from sla 
where objectname = 'INCIDENT' and 
     status in 'ACTIVE' and 
     (exists (select 1 
       from classancestor 
       where ancestor=sla.classstructureid and classancestor.classstructureid= '') or 
     classstructureid is null or 
     classstructureid = '' 
    ) ; 

데이터베이스 중 하나에는 260 개의 결과가, 다른 하나에는 0 개의 결과가 표시됩니다. 이 쿼리는 사용중인 ERP에 의해 생성되므로 SQL 자체를 수정할 수 없습니다.

내가 알아챈 한 가지는 존재 연산자를 둘러싼 괄호를 제거하면 동작이 변경된다는 것입니다.

누군가 도움을 줄 수 있습니까? OR을 사용할 때 우선 순위가 있습니까? SQL 문 처리 방법에 영향을주는 Oracle 패치가 있습니까?

덕분에 지금은 단순히 오라클 11g의 최적화에 복귀하고 내 문제를 해결하기위한

+0

'동작이 변경됩니다'... 동작이 변경됩니까? 내 생각 엔 기본 테이블이 동일하지 않다는 것입니다. –

+0

예. 죄송합니다. 두 데이터베이스에서 같은 결과가 나타납니다. 두 데이터베이스가 동일하며 SQL 문에있는 각 테이블을 철저하게 비교했습니다. – Pete

+0

다음 질문 : 두 데이터베이스 모두 Oracle 버전이 동일합니까? –

답변

1

좋아.

ALTER SYSTEM SET optimizer_features_enable='11.2.0.3'; 

내가 가장 좋아하는 해결책은 아니지만 지금은 해결 방법입니다.

도움 주셔서 감사합니다.