Fehler während der trigger-Ausführung - ORA-06512 - ORA-04088
Habe ich diese Tabellen
ZELLE(CellId, x0, y0, x1, y1, CurrentPhone#, MaxCalls)
TELEFON(PhoneNo, x, y, PhoneState)
STATE_CHANGE(ChangeId, TimeStamp, PhoneNo, x, y, ChangeType)
Und ich habe diese zu erstellen-trigger (der Auslöser ist obligatorisch)
Ändern der maximalen Anzahl der aktiven Anrufe: Die maximale Anzahl aktiver Anrufe mit Bezug zu einer einzigen Zelle kann reduziert werden, indem das Mobiltelefon-Netzwerk für die Verwaltung Probleme (Rückgang der MaxCalls Wert in der ZELLE Tabelle). Das update auf die MaxCalls Attribut für eine einzelne Zelle könnte es zu einer inkonsistenten situation, in der die MaxCalls Wert in der ZELLE Tabelle kleiner wird als die Anzahl der derzeit Aktiven Handys (PhoneState='Aktiv') in der betrachteten Zelle. Wenn ja, wird die entsprechende MaxCalls - Attribut aktualisiert werden muss mit der Anzahl der aktuell Aktiven Handys (PhoneState='Aktiv') in der betrachteten Zelle
Schrieb ich diesen Auslöser
create or replace trigger CELL_T1
AFTER UPDATE OF MAXCALLS ON CELL
BEGIN
UPDATE CELL E1
SET E1.MAXCALLS=(
SELECT COO
FROM (SELECT E2.CELLID, COO
FROM CELL E2, (
SELECT CELLID, COUNT(*) COO
FROM CELL C2, TELEPHONE
WHERE PhoneState='Active' AND x<x1 AND x>=x0 AND y<y1 AND y>=y0
GROUP BY C2.CellId
)TW
WHERE E2.CELLID=TW.CELLID AND COO>E2.MAXCALLS
)
)
WHERE E1.CELLID IN (
SELECT C1.CELLID
FROM CELL C1, (
SELECT CELLID, COUNT(*) COO
FROM CELL C3, TELEPHONE
WHERE PhoneState='Active' AND x<x1 AND x>=x0 AND y<y1 AND y>=y0
GROUP BY C3.CellId
)TW1
WHERE C1.CELLID=TW1.CELLID AND COO>C1.MAXCALLS and e1.cellid=tw1.cellid
);
END;
Trigger kompiliert werden, ohne ein problem; dann schrieb ich die update-Anweisung:
UPDATE CELL SET MAXCALLS=MAXCALLS-2;
aber ich habe diese Fehler:
ORA-06512: at "MATTEO.CELL_T1", line 2
ORA-04088: error during execution of trigger 'MATTEO.CELL_T1'
ORA-06512: at "MATTEO.CELL_T1", line 2
ORA-04088: error during execution of trigger 'MATTEO.CELL_T1'
ORA-06512: at "MATTEO.CELL_T1", line 2
ORA-04088: error during execution of trigger 'MATTEO.CELL_T1'
ORA-06512: at "MATTEO.CELL_T1", line 2
ORA-04088: error during execution of trigger 'MATTEO.CELL_T1'
ORA-06512: at "MATTEO.CELL_T1", line 2
ORA-04088: error during execution of trigger 'MATTEO.CELL_T1'
ORA-0
- UPDATE ZELLE
- SET MaxCalls = MaxCalls-2;
Kann ich nichts finden, was falsch ist in meinem trigger; was mache ich falsch?
- Ich kann nicht erstellen Sie einen view oder eine Prozedur
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist wahrscheinlich, dass du tust, ein Rekursives update hier. Beim ausführen von UPDATE-trigger hat ein weiteres UPDATE, welches die den trigger auslöst, die nicht ein anderes UPDATE in einem nie endenden Zyklus. Bis, das heißt, Oracle langweilig und wirft alle diese Ausnahmen.
In dieser situation gibt es eigentlich nur zwei Möglichkeiten aus.
Obwohl ich weiß, dass der Grund für diese Frage (Ihre Universität-Zuweisung) ist nicht mehr relevant. Jemand anderes könnte noch einige ähnliche problem.
So etwas wie das hier tun (NICHT getestet in einer Datenbank, ist nur die schriftliche on-the-fly)
Was dieser tut, ist
- Abfrage der
telephone
Tabelle für die Anzahl der aktiven Handys in die Zelle, gekennzeichnet durch die aktuell geänderte Zeile (:NEUES dataset)- Prüfen, ob die geänderte
maxcalls
Wert größer ist als diese Zahl, und wenn so ändern Sie die neuemaxcalls
Wert entsprechendDiese, durch die Art und Weise, ist genau das, was diese Art von Trigger sind.