ORACLE: Aktualisierung Materialized view

Hallo zusammen,

habe eine materialisierte View in ORACLE 9i erstellt. Die view ist eine union select-view, eine Aktualisierung on Commit ist nicht möglich.
Änderungen werden nur an den Basistabellen gemacht, über die view wird nichts geändert. Damit bei Änderungen der Básistabellen die view aktualisiert wird, habe ich einen Trigger für die Basistabelle erstellt, der folgende Prozedur aufruft:

CREATE OR REPLACE PROCEDURE „SCOTT“.„FIRMEN_UPDATE“ as
pragma AUTONOMOUS_TRANSACTION;
begin
dbms_snapshot.refresh(‚SCOTT.FIRMEN‘);
end;

Leider wird nun erst die Prozedur ausgeführt und dann die Basistabelle geändert, Änderungen werden also dabei nicht in die view übernommen.

Gibt es vielleicht eine Lösung, die die view bei Änderung der Basistabelle aktualisiert?

Danke für eure Hilfe

MfG

Marion

Hallo Marion,

Damit bei Änderungen der
Básistabellen die view aktualisiert wird, habe ich einen
Trigger für die Basistabelle erstellt, der folgende Prozedur
aufruft:

Wie legst du denn den Trigger an? (after each row, after update, …)

Gruß
Martin

Hallo Martin,

der Trigger kann nichts sehen, da er das Programm vor dem COMMIT startet. UNd da steht noch nichts in der Tabelle. Jadenfalls nichts für andere.

Man muss den View so einrichten, dass er das Update immer automatich macht. Ich dachte eigentlich, dass das die Default Option wäre.

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi!

der Trigger kann nichts sehen, da er das Programm vor dem
COMMIT startet. UNd da steht noch nichts in der Tabelle.
Jadenfalls nichts für andere.

Ev. „after update/insert/delete“-Trigger?

Man muss den View so einrichten, dass er das Update immer
automatich macht. Ich dachte eigentlich, dass das die Default
Option wäre.

Default ist - aus dem Handgelenk - manuelles Refresh (prügelt mich, wenn ich mich irre)

Grüße,
Tomh

Hallo MArion,

versuchs mal mit:

ALTER MATERIALIZED VIEW
REFRESH
ON COMMIT;

Dann sollte er bei jedem COMMIT automatisch aktualisiert sein.

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Default ist - aus dem Handgelenk - manuelles Refresh (prügelt
mich, wenn ich mich irre)

Grüße,
Tomh

Hallo Tomh,

ja, du hast recht. Man muss den Refresh erst auf REFRESH ON COMMIT umstellen.

Gruß

Peter

Hallo,

und danke für eure Antworten.

Also wenn ich versuche, die view auf ON COMMIT umzustellen, erhalte ich folgende Fehlermeldung:

ORA-12054: Refresh-Attribut ON COMMIT kann für Materialized View nicht festgelegt werden

wohl weil die view ein ‚Union select‘ ist, Funktionen, Bedingungen enthält,…

Den Trigger habe ich ‚After Update, Insert, Delete‘ gesetzt, aber der wird eben erst nach der Prozedur ausgeführt und commit innerhalb des Triggers ist in ORACLE wohl nicht möglich.

Viele Grüße

Marion