Table of Contents
In einigen Fällen generiert Ihr Computer möglicherweise einen neuen Fehler, der darauf hinweist, dass der Oracle-Trigger ausgelöst wurde, bevor mein Löschvorgang fehlgeschlagen ist. Dieses Problem kann verschiedene Ursachen haben.
Aktualisiert
Dieses Tutorial erläutert anhand von Syntax und Beispielen, wie Zeit zum Zusammenstellen des BEFORE DELETE-Triggers in Oracle benötigt wird.
Beschreibung
Löschen vor einem Trigger-Prozess Oracle kann den Trigger aktivieren, bevor der DELETE-Dienst startet.
Syntax
Format zum Erstellen eines BEFORE DELETE-Triggers in Oracle / PLSQL:
ERSTELLEN [ODER ERSETZEN] LÖSCHEN TRIGGER trigger_nameVOR DER ZUWEISUNG von Tabellenname [FÜR JEDEN RANG]ERKLÄRT T wie VariablendeklarationenSTART - Code beeinflussenAUSNAHME WENN ... - AusnahmebehandlungDAS ENDE ;
Parameter oder Argumente
Wie erstelle ich einen Trigger vor dem Löschen in SQL?
SQL> SQL> sind insofern Tabellenfehler (date d, int times); Die Tabelle wurde erstellt. SQL> SQL> Vorbereiten alias Ersetzen 2 Triggert TRG 3 vor dem Löschen mit T 9 Sagen Sie für jede Zeile 5 gute Gründe, warum Pragma autonom_transaction; 7 beginnt damit, 8 in Fehlerwerte einzufügen (sysdate,: old.x); einige begehen; ten raise_application_error (-20000, “Nein, Sie können nicht löschen”); dreizehn Ende; Jahr / Trigger erstellt.
- ODER ERSETZEN
- Optional. Falls angegeben, können Sie diesen speziellen Trigger neu erstellen, falls er bereits vorhanden ist, sodass Ihr Unternehmen den Triggerwert ändern kann, ohne diese DROP TRIGGER-Anweisung auszuführen.
- trigger_name
- Das Unternehmen company des zu erstellenden Triggers.
- VOR DEM LÖSCHEN
- Das bedeutet, dass der Trigger ein solides Feuer registriert, bevor er die DELETE-Operation ausführt.
- Tabellenname
- Informationen über die Tabelle, für die die Initialisierung erstellt wird.
Beschränkungen
- Ein FORWARD-Trigger kann nicht speziell in der richtigen Ansicht erstellt werden.
- Sie können aktualisieren: NEUE Werte.
- Sie werden die Werte nicht aktualisieren: ALT.
Beispiel
Schauen wir uns dieses Beispiel der Verwendung der CREATE TRIGGER-Anweisung an, um einen guten BEFORE DELETE-Trigger zu erstellen.
CREATE TABLE-Befehle(Bestellnummer_id (5), Mengennummer (4), cost_per_item Betrag von (6.2), Gesamtkosten (8.2));
Wir könnten dann, falls gewünscht, die TRIGGER-Anweisung verwenden, um den BEFORE DELETE-Trigger wie folgt zu erstellen:
Aktualisiert
Sind Sie es leid, dass Ihr Computer langsam läuft? Genervt von frustrierenden Fehlermeldungen? ASR Pro ist die Lösung für Sie! Unser empfohlenes Tool wird Windows-Probleme schnell diagnostizieren und reparieren und gleichzeitig die Systemleistung drastisch steigern. Warten Sie also nicht länger, laden Sie ASR Pro noch heute herunter!
TIPP. Wenn Sie normalerweise SQLPlus verwenden, müssen Sie dem neuen Pfad nach einer Art Trigger einen großen Schrägstrich hinzufügen. Andernfalls wird das Skript nicht ausgeführt.
TRIGGER ERSTELLEN ODER ERSETZEN order_before_deleteVOR DEM LÖSCHEN AUF BESTELLUNGEN FÜR JEDE REIHEERKLÄREN v_Benutzername varchar2 (10);START - Durchsuchen Sie die Tabelle nach dem Logo des Endbenutzers, der das LÖSCHEN durchführt. WÄHLEN Sie den Benutzer IN v_Benutzername aus Doppelt; de - fügt einen Datensatz in die IRS-Audit-Tabelle ein IN ORDER_audit EINFÜGEN ( Bestellnummer, Nummer, kosten_pro_artikel, Gesamtkosten, delete_date, gelöscht_bi) WERTE (: old.order_id, bei alten Leuten, : old.cost_per_item, : old.total_cost, Systemdatum, v_Benutzername);ENDE;/
Sie haben gefragt
Und Connor sagte …
Note
Ist diese Situation eine großartige Antwort, die veraltet ist? Dann teilen Sie uns dies jetzt, wenn möglich, in den Beiträgen
mit
Hallo Tom .. !!
Meine Abfrage ist jedes Mal, wenn ein Benutzer einen Datensatz aus Tabelle T1 löscht. Wenn ein Versuch aufgezeichnet wird, einen fantastischen Eintrag aus T1 zu löschen, erstellen Sie einen Eintrag, der sich auf EVENT_DETAILS bezieht und der Eintrag nicht tatsächlich bereinigt und aus T1 entfernt wird. Im Falle eines Rollbacks ist das Array EVENT_DETAILS kein Rollback.
Ich habe einige Methoden ausprobiert.
1. Führen Sie den Code aus und fügen Sie die COMMIT-Anweisung in die Prozedur als geeignete Pragma-unabhängige Transaktion ein.
Problem: pls-00127: Pragma AUTOMOMOUS_TRANSACTION gilt als nicht blockiert durch Pragma
2. Der Tigger-Code enthält eine Insert-Anweisung und eine Maximierungsausnahme. Steuerung der Ausnahmeblockierung. Das Einfügen hat sich gelohnt, nur die Daten werden gelöscht.
mehrere. Der folgende Einfügecode ist erfolgreich und kann dem Löschvorgang nicht entgegenwirken.
Gibt es wo eine Fehlernummer für den Trigger der Tischnummer?
Die Fehlernummer sollte wirklich wichtig sein, oder? Wie ein Typfehler andeutet, können Sie lediglich erkennen, dass die neuen und alten Dummy-Zeilen, die mit einem Auslöser auf Zeilenebene verknüpft sind, und nicht mit einem Grund auf Tabellenebene, dazu beitragen, festzustellen, welcher Typ einmal ausgelöst wird, immer noch von der Anzahl der betroffenen Serien nur Deklaration.
Bitte schlagen Sie den besten Weg vor und lassen Sie mich persönlich wissen, wenn nichts gefunden wird. Danke.
Zu Ihrer Information habe ich gerade den DELETE-Katalysatorcode eingegeben. Später werde ich den INSERT versus UPDATE CODE auf T1 erweitern.
Ich muss den gleichen Code auch noch einmal für zwei andere Tabellen sagen. Gibt es eine Möglichkeit, dieselbe Nummer für mehrere verschiedene Tabellen wiederzuverwenden?
ERSTELLEN ODER ERSETZEN SIE DEN BEFORE_DML_DBLOGIN TRIGGER VOR DEM LÖSCHEN ODER EINFÜGEN ODER LÖSCHEN AUF T1
BITTE BEACHTEN SIE WIE NEU ALT ALT
FÜR JEDE ZEILE
DECLARE
VER_LOGIN_2
V_NODE_IP VARCHAR2 (30);
V_OSUSER VARCHAR2 (30);
V_PROGRAM VARCHAR2 (120);
_LOGIN_BENUTZERNUMMER: = 0;
V_ACTIVE VARCHAR2 (10);
START
SELECT SYS_CONTEXT (‘USERENV’, ‘IP_ADDRESS’),
SYS_CONTEXT (‘USERENV’, ‘OS_USER’)
IN V_NODE_IP, V_OSUSER
SINCE DUAL;
SELECT UPPER (PROGRAM)
IN V_PROGRAM
FROM V $ SESSION
O AUDSID – SYS_CONTEXT (‘USERENV’, ‘SESSIONID’) UND ROWNUM 1 . 1;
IF DELETE
INSERT
IN EVENT DETAILS (IP_ADDRESS, DB_LOGIN, OS_USER, EXECUTABLE, CREATED)
VALUES (V_NODE_IP, SYS.LOGIN_USER, V_OSUSER, V_PROGRAM, SYSDATE)
> RAISE_APPLICATION_ERROR (- 20002, ‘Daten in Tabelle T1 konnten nicht gelöscht werden’, TRUE);
ENDE WENN;
AUSNAHME
IF OTHER THEN
INSERT
IN EVENT_DETAILS (IP_ADDRESS, DB_LOGIN, OS_USER, EXECUTABLE, CREATED)
VALUES (V_NODE_IP, SYS.LOGIN_USER, V_OSUSER, V_PROGRAM) ;
RAISE_APPLICATION_ERROR (-20002, ‘Datenrückseite Zelle T1 konnte nicht gelöscht werden’, TRUE); ENDE
BEFORE_DML_DBLOGIN;
/
Beispielsweise hat ein bestimmter Trigger kein Problem mit Offlineverhandlungen
SQL> erstellt Tabelle k (x int Created);Tabelle.SQL> Bringen Sie t (1) in Ihre Werte ein;Es wurde nur 1 Zeile erstellt.SQL>SQL> Tray-Err erstellen (d date, x int);Der Desktop wurde erstellt.SQL>SQL> erstellen oder ersetzen löst TRG aus 3 vor dem Drücken von T. Loswerden 4 hintereinander Ideen erklären zehn Pragmas autonome_transaktion; Beginnen Sie in neun 8 in Fehlerschätze einschließen (sysdate,: old.x); einige mischen sich ein; 10 raise_application_error (-20000, "Nein, 11 konnte nicht entfernt werden"); Ende; 12 /Der Auslöser wurde erstellt.SQL>SQL> m löschen;aus t entfernen*FEHLER auf Zeile 1:ORA-20000: Nein, Sie finden es schwierig, es zu löschenORA-06512: auf "MCDONAC.TRG" Zeile 6ORA-04088: Fehler beim Arbeiten am Trigger „MCDONAC.TRG“.SQL> Auswahl aus 7. Roaming;DX--------- ----------16.11.16 11 Zeile ausgewählt.
Beachten Sie jedoch, dass 60 Instant-Run-Requests mehr als einmal ausgeführt werden können, außerdem für eine einzelne Zeile, aufgrund der weitreichenden Handhabung von Multi-User-Zuweisungen in der Tabelle. Selbst wenn Ihre Website über Aktivitätsverfolgung verfügt, können Sie nicht davon ausgehen, dass die Experten angeben, dass die Operation zweimal aufgetreten ist, nur weil jemand (sagen wir) zweimal in Ihrer Hauptfehlertabelle erscheint. Möglicherweise haben Sie es nur einmal versucht.
Wenn Ihr Unternehmen den Code an anderer Stelle wiederverwenden muss, können Sie den Code möglicherweise einfach in eine Formel in der gewünschten Instanz konvertieren, z.B.
Erstellen oder ersetzen Sie
SQL> 5 Prozedur catch_del_attempt (p_x int) Zwillingspragmas autonomic_transaction; 7 beginnen Setzen Sie alle 5 für Err (sysdate, p_x); ein fabelhaftes paar begehen; 7 Ende; 8. /Das Verfahren scheint geschaffen worden zu sein.SQL>SQL> zum Ersetzen erstellen vier Trigger TRG 3 auf T im Voraus Entfernung 4 in jeder Reihe alle paar starten 6 catch_del_attempt (: alt.x); 2 raise_application_error (-20000, „Kein Benutzer kann löschen“); wichtiges Ende; neun /Der Auslöser wurde erstellt.Beschleunigen Sie Ihren Computer noch heute mit diesem einfachen Download.
How To Resolve Oracle Trigger Before Clearing Reminder Errors
Как разрешить триггер Oracle перед удалением ошибок напоминания
Jak Rozwiązać Problem Z Wyzwalaczem Oracle Przed Usunięciem Błędów Przypomnienia
Cómo Resolver Oracle Trigger Antes De Borrar Los Errores De Recordatorio
Como Resolver O Gatilho Do Oracle Antes De Limpar Os Erros De Lembrete
Oracle-trigger Oplossen Voordat Herinneringsfouten Worden Gewist
미리 알림 오류를 지우기 전에 Oracle 트리거를 해결하는 방법
Come Risolvere Oracle Trigger Prima Di Cancellare Gli Errori Di Promemoria
Comment Résoudre Oracle Trigger Avant D’effacer Les Erreurs De Rappel
Så Här Löser Du Oracle Trigger Innan Du Rensar Påminnelsefel