Я хочу создать материализованное представление с быстрым обновлением. Вид агрегирует значения из одной таблицы:Материализованные данные обзора не обновляются
CREATE TABLE N_INSP_DTSEDIF_PLANTAS (
IMPORTACION_ID NUMBER(*,0) NOT NULL,
ID NUMBER(10) NOT NULL,
INSPECCION_ID NUMBER(10) NOT NULL,
NOMBRE_PLANTA VARCHAR2(255 CHAR),
NUM_VIVIENDAS NUMBER(10),
SUP_CONSTRUIDA_VIVIENDAS DECIMAL(10,4),
-- Plus some other columns I don't need
CONSTRAINT N_INSP_DTSEDIF_PLANTAS_P PRIMARY KEY (
IMPORTACION_ID,
ID
) ENABLE,
CONSTRAINT N_INSP_DTSEDIF_PLANTAS_F FOREIGN KEY (IMPORTACION_ID)
REFERENCES IMPORTACION (IMPORTACION_ID)
ON DELETE CASCADE
ENABLE
);
CREATE INDEX N_INSP_DTSEDIF_PLANTAS_X ON N_INSP_DTSEDIF_PLANTAS (IMPORTACION_ID);
CREATE SEQUENCE N_INSP_DTSEDIF_PLANTAS_S
INCREMENT BY 1
START WITH 1
MINVALUE 1
CACHE 20;
CREATE OR REPLACE TRIGGER N_INSP_DTSEDIF_PLANTAS_T
BEFORE INSERT
ON N_INSP_DTSEDIF_PLANTAS
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
SELECT N_INSP_DTSEDIF_PLANTAS_S.NEXTVAL INTO :NEW.ID FROM DUAL;
END IF;
END N_INSP_DTSEDIF_PLANTAS_T;
/
ALTER TRIGGER N_INSP_DTSEDIF_PLANTAS_T ENABLE;
Я состою это путем проб и ошибок:
CREATE MATERIALIZED VIEW LOG ON N_INSP_DTSEDIF_PLANTAS
WITH ROWID, SEQUENCE (IMPORTACION_ID, INSPECCION_ID, NUM_VIVIENDAS, SUP_CONSTRUIDA_VIVIENDAS)
INCLUDING NEW VALUES;
CREATE MATERIALIZED VIEW V_PLANTAS
REFRESH FAST
AS
SELECT IMPORTACION_ID, INSPECCION_ID,
SUM(NUM_VIVIENDAS) AS NUM_VIVIENDAS, SUM(SUP_CONSTRUIDA_VIVIENDAS) AS SUP_CONSTRUIDA_VIVIENDAS
FROM N_INSP_DTSEDIF_PLANTAS
GROUP BY IMPORTACION_ID, INSPECCION_ID;
Объектов получить созданы без ошибок и SELECT * FROM V_PLANTAS
возвращает данных. Однако представление застопорилось. Новые строки, добавленные в N_INSP_DTSEDIF_PLANTAS
, не отображаются в V_PLANTAS
.
Что я неправильно понял из документации?
Я думаю, что вы также, вероятно, хотите, по крайней мере, указать COUNT (NUM_VIVIENDAS) и COUNT (SUP_CONSTRUIDA_VIVIENDAS), поскольку быстрое обновление не может удалить строки из материализованного представления, если последнее вхождение конкретной комбинации IMPORTACION_ID и INSPECCION_ID удаляется из базовой таблицы. Ознакомьтесь с http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_mview.htm#CEGGEHHC, чтобы узнать, каковы возможности MView. –
@DavidAldridge Я даже не знал, что это возможно. Это слишком много злоупотреблений, если я попрошу пример? –
У меня был бы хороший обзор материала руководства по хранилищу данных на MVs http://docs.oracle.com/cd/B28359_01/server.111/b28313/basicmv.htm и http://docs.oracle.com/ cd/B28359_01/server.111/b28313/advmv.htm, который даст вам полный обзор этого типа использования МВ. –