Die Reihenfolge der Ausführung der trigger und-Anweisungen in Oracle gespeicherten Prozedur
Unten sind meine Tabellen-Strukturen :
Table -Customer
CustomerID Blacklisted Customer Name
101 Y ABC
102 Y DEF
Table -Blacklist
CustomerID BlacklistID Customer Name
101 1011 ABC
102 1012 DEF
Table -Reason
BlacklistID ReasonID Reason Code
1012 02 Rcode2
Haupt-Tabelle "Kunden" zum speichern von Kundendaten.Es ist ein after update-trigger auf der Tabelle "Kunde" einfügen Datensatz in der Tabelle "Blacklist", wenn jemand aktualisiert die schwarze Liste als Y in der customer-Tabelle.
Wir betrachten den Kunden als die schwarze Liste gesetzt, wenn
- Blacklist Spalte in der Tabelle "Kunde" als Wert 'Y' und.
- Es sind Datensätze vorhanden, die für Kunden in der Blacklist und Vernunft Tabelle
Nun meine Forderung ist, auf die blacklist setzen die Kunden von back-End.Für diese Schreibe ich gespeicherte Prozedur mit den unter-Abfragen:
- Update Kunde set Blacklist ='Y' where customerid='102';
- wählen Sie BlacklistID in var_id von der blacklist, wo customerid='102';
- Insert into reason(BlacklistID,ReasonID,ReasonCode)values(var_-id,111,'RCODE1');
Nun einfügen, Eintrag in Grund-Tabelle(Schritt 3),muss ich BlacklistID das ist ein foreign key, und ich werde den Wert BlacklistID sobald der trigger auf der Tabelle "Kunde" bekommt exceuted.Also meine Verwirrung ist, kann ich davon ausgehen das auslösen auf Aktualisierung der 'Kunden' - Tabelle wird immer wieder excuted vor dem cntrl erreicht mein INSERT INTO reason(Schritt-3) - Anweisung. Bitte vorschlagen.
InformationsquelleAutor user2548985 | 2013-07-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja. Trigger sind Teil der Aussage. Obwohl Sie sich nicht vollständig bestimmten *) die Reihenfolge, in der mehrere Trigger in der gleichen Anweisung ausgeführt werden, können Sie sicher sein, dass Sie al durchgeführt, wenn die Anweisung selbst erfolgt. So durch die Zeit, die der Schritt 2, alle update-Trigger von Schritt eins geschossen haben.
*) Eigentlich ist die Standard-Reihenfolge ist:
Aber wenn Sie, sagen wir, zwei row level before-trigger, standardmäßig können Sie nicht sicher sein, in welcher Reihenfolge diese beiden ausgeführt werden. Aber ich habe gelernt aus den Kommentaren, die in Oracle 11, kann man eigentlich angeben, um auch diesen Fällen.
Sie kann geben Sie die Reihenfolge der Trigger. Siehe Anleitung: docs.oracle.com/cd/E11882_01/appdev.112/e25519/...
Trigger-Reihenfolge der Ausführung gewährleistet werden kann von 11.1 an mit der syntax FOLGT auf CREATE TRIGGER. docs.oracle.com/cd/B28359_01/appdev.111/b28370/...
Jungs, danke für die Ergänzung. Ich bin immer noch auf 10, aber ich werde ändern Sie die Antwort. Beachten Sie aber, dass die Bemerkung zur Bestellung ist nur eine Randnotiz. Die Frage (die ich antwortete in meinem ersten Absatz) über die einzelnen Aussagen, so dass es nicht dort bewerben.
InformationsquelleAutor GolezTrol
Wenn Sie brauchen, um sicher zu sein über die Reihenfolge der trigger ausgeführt wird, können Sie dies angeben, um beim erstellen der trigger.
Dies geschieht mit der
FOLLOWS ...
undPRECEEDS ...
Optionen der create trigger-Anweisung:Mehr details in der Anleitung: http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/create_trigger.htm#CJAEJAFB
Ich habe diese question wenn ich Folgen, dann kann ich die Sequenz-id und update die id für den anderen löst?
InformationsquelleAutor a_horse_with_no_name
Sehe ich keine Notwendigkeit für alle diese Tabellen, und daher keine Notwendigkeit für einen trigger.
Warum tun Sie nicht einfach eine blacklist, Grund, code in der Tabelle Kunde? Der Zweck der blacklist-Tabelle unklar ist, wie es scheint, keine Daten und nur wiederholt Daten aus der customer-Tabelle mit einer zusätzlichen Spalte "id"?
Benötigen oder wenn Sie mehrfach-ursachencodes dann nur mit einem blacklist_reason Tabelle, die Referenzen der Kunden-id und einen Grund-code-ich glaube nicht, dass Sie noch brauchen, die schwarze Liste-Spalte der customer-Tabelle.
InformationsquelleAutor David Aldridge