여기서 "0보다 큰" Oracle 버그 가능성
행의 개수를 잘못 전달하는 선별 명세서가 있습니다.문제를 재현할 수 있습니다.Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
등에Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
재생할 수 없습니다.Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
테스트 데이터:
CREATE TABLE PERSON AS
SELECT LEVEL AS ID, 'Person_'||LEVEL AS NAME, 10 as maxVal
FROM DUAL
CONNECT BY LEVEL <= 5;
create table orders as
SELECT LEVEL AS ID, 'Order_'||LEVEL AS NAME
FROM DUAL
CONNECT BY LEVEL <= 3;
다음 쿼리를 시도하면 5개가 아닌 3개의 결과만 얻을 수 있습니다.
select p.*
from person p
where (maxVal - (select count(*)
from orders o
where o.id = p.id)
) > 0
쿼리를 다음과 같이 수정하면 5개의 결과(정확한 숫자여야 함)가 나타납니다.
select p.*
from person p
where (maxVal - (select count(*)
from orders o
where o.id = p.id)
) > 1
또한 다음과 같은 수정을 통해 올바른 결과를 얻을 수 있습니다.
select p.*
from person p
where (maxVal - (select count(*)
from orders o
where o.id = p.id)
) > 0 + 0
Bind Variables(변수 바인딩)을 사용하면 올바른 Result(결과) 수를 얻을 수도 있습니다.
select p.*
from person p
where (maxVal - (select count(*)
from orders o
where o.id = p.id)
) > :num
그렇다면 "0보다 크다"를 사용하면 (알려진) 버그가 있습니까?
다른 버그가 패치 된 후에 나온 버그입니다.
("Bug 17564992 오류 12999577에 대한 수정과 함께 잘못된 결과가 My Oracle Support Doc ID 17564992를 나타냅니다.8")
자체 패치(Patch 17564992, 테스트하지 않음)가 있지만 다음과 같은 해결 방법이 있습니다.
alter session set "_fix_control" = '12999577:0';
alter session set "_optimizer_squ_bottomup"= FALSE;
언급URL : https://stackoverflow.com/questions/25443240/possible-oracle-bug-with-greater-than-0-in-where-clause
'source' 카테고리의 다른 글
자바스크립트에서 2 == [2]가 나타나는 이유는 무엇입니까? (0) | 2023.10.01 |
---|---|
각 및 스플라이스에 대한 angularjs (0) | 2023.10.01 |
정의('CONCATENATE_SCRIPTs', false)를 사용하도록 강제됨; 갑자기 (0) | 2023.09.26 |
SQLite 소스 코드 읽기를 어디서 시작해야 합니까? (0) | 2023.09.26 |
select insertion으로 어떻게 하는지 궁금합니다. (0) | 2023.09.26 |