Данные, извлеченные из 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
- В выбранных случаях возвращаемый факс равен NULL, тогда как фактические данные факса есть.
- Теперь, когда я создаю представление с точно таким же SELECT, я получаю правильные данные факса (макс. Факсов)
- Когда я запрашиваю BECRS напрямую, я получаю все строки перед выравниванием, а некоторые строки имеют данные факсаТаким образом, максимум этого также возвращает правильный факс.
- Это не только с факсом, но и с другими полями.
- Однажды MV возвратил факс, которого не было в базовом источнике.Через несколько дней (ежедневно обновляется MV) этот несуществующий факс исчез из MV.