Материализованный просмотр данных отличается от просмотра с одним и тем же источником - PullRequest
0 голосов
/ 09 февраля 2019

Данные, извлеченные из MV, немного отличаются от данных, извлекаемых из вида с точно таким же источником sql.Данные, полученные из MV, являются неточными и противоречивыми.

Кроме того, при каких обстоятельствах эти данные будут отличаться?Я не использовал NACHGING для кэширования, а также нет журналов просмотра MV.

У меня Oracle 10g.Пробовал сбрасывать и заново создавать MV, бесполезно.Факс имеет тип данных VARCHAR2.

MV создается из представления, называемого BECRS.Представление BECRS состоит из нескольких строк, которые сглаживаются в MV путем выбора максимального значения.

CREATE MATERIALIZED VIEW MYROW
TABLESPACE USERS
PCTUSED    0 PCTFREE    10 INITRANS   2 MAXTRANS   255
STORAGE    (INITIAL 64K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE      0 BUFFER_POOL DEFAULT)
NOCACHE NOLOGGING NOCOMPRESS
BUILD IMMEDIATE
REFRESH FORCE
START WITH ...NEXT ...
WITH PRIMARY KEY AS 
SELECT B_ID || '.' || LANG_ID AS ID, 
       , COMP_ID
       , MAX(TRIM(PHONE_AREA_CODE)) AS PHONE_AREA_CODE
       , MAX(TRIM(BECRS.PHONE)) AS "PHONE"
       , MAX(TRIM(FAX_AREA_CODE)) AS FAX_AREA_CODE
       , MAX(TRIM(FAX)) AS FAX
...
FROM BECRS
GROUP BY SELECT B_ID, LANG_ID, COMP_ID
  1. В выбранных случаях возвращаемый факс равен NULL, тогда как фактические данные факса есть.
  2. Теперь, когда я создаю представление с точно таким же SELECT, я получаю правильные данные факса (макс. Факсов)
  3. Когда я запрашиваю BECRS напрямую, я получаю все строки перед выравниванием, а некоторые строки имеют данные факсаТаким образом, максимум этого также возвращает правильный факс.
  4. Это не только с факсом, но и с другими полями.
  5. Однажды MV возвратил факс, которого не было в базовом источнике.Через несколько дней (ежедневно обновляется MV) этот несуществующий факс исчез из MV.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...