Материализованное представление возвращает больше результатов, чем сам запрос Oracle - PullRequest
0 голосов
/ 30 октября 2019

Я сталкиваюсь с таким странным поведением в нашей базе данных (Oracle 12c): существует запрос, который содержит несколько разделов по предложениям и подзапросам. После того, как мы преобразовали его в материализованное представление, мы получаем другие результаты, чем при отдельном выполнении запроса. Код, сгенерированный SQLDeveloper для создания объекта:

CREATE MATERIALIZED VIEW  {MV_name}.{columns}
 ORGANIZATION HEAP PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 163840 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE {our_tablespace}   NO INMEMORY 
  BUILD IMMEDIATE
  USING INDEX 
  REFRESH COMPLETE ON DEMAND START WITH sysdate+0 NEXT SYSDATE + 1
  USING DEFAULT LOCAL ROLLBACK SEGMENT
  USING ENFORCED CONSTRAINTS DISABLE QUERY REWRITE
  AS
{query}

Запрос:

select process_number, status, LASTCHANGEUSER, date_time, 
rank() over (partition by cos.process_number order by cos.date_time desc) rank
from (

    select  process_number,
             status, 
             grp,
             LASTCHANGEUSER,
             min(jn_datetime) over (partition by process_number, grp order by jn_datetime) as date_time,
             rank() over (partition by process_number, grp order by jn_datetime) as aux_rank
    from     (select process_number,
                     jn_datetime,
                     status,
                     process_jn.LASTCHANGEUSER,
                     row_number() over (partition by process_number order by jn_datetime)
                       - row_number() over (partition by process_number, status order by jn_datetime) grp
              from   process_jn
            )
    ) cos where aux_rank = 1;

Кто-нибудь знает, что там могло произойти, пожалуйста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...