Table of Contents
In sommige gevallen kan uw computer een fout genereren waaruit blijkt dat de Oracle-trigger is geactiveerd voordat het wissen is mislukt. Dit probleem kan verschillende oorzaken hebben.
Bijgewerkt
Deze tutorial legt uit hoe je de BEFORE DELETE-trigger in Oracle samenvoegt met behulp van formaat en voorbeelden.
Beschrijving
Verwijderen voor een trigger betekent dat Oracle de trigger kan activeren voordat het DELETE-programma start.
Syntaxis
Formaat voor het maken van een BEFORE DELETE resultaat in Oracle / PLSQL:
MAAK [OF VERVANG] TRIGGER VERWIJDEREN trigger_nameALVORENS tabelnaam toe te wijzen [VOOR ELKE RANG]UITGELEGD T - flexibele declaratiesBEGINNEN - triggercodeUITZONDERING ALS ... - Afhandeling van uitzonderingenHET EINDE ;
Parameters of argumenten
Hoe te resulteren in een trigger voor verwijderen in SQL?
SQL> SQL> er kunnen tabelfouten zijn (datum d, int tijden); De lade is gemaakt. SQL> SQL> bereid of repareer 2 triggers TRG 3 voordat ze worden verwijderd met T 9 zeg voor elke rij 5 7 pragma autonom_transaction; 7 begint 8 in te voegen in overeenstemming met foutwaarden (sysdate,: old.x); begaan een paar; tien raise_application_error (-20000, “Nee, je kunt niet verwijderen”); 11 einde; Jaar / trigger gemaakt.
- OF VERVANG
- Optioneel. Indien opgegeven, kunt u het resultaat opnieuw maken als het al bestaat, zodat u de triggerwaarde kunt wijzigen zonder de DROP TRIGGER-instructie uit te voeren.
- trigger_name
- De bedrijfsnaam bij de trigger om aan te maken.
- VOORDAT VERWIJDEREN
- Dit betekent dat de trigger een sack registreert voordat de DELETE-bewerking wordt uitgevoerd.
- tabelnaam
- Informatie over de tabel waarvoor vaak de initialisatie wordt gemaakt.
Limieten
- Een FORWARD-trigger kan niet in de juiste weergave worden geïntroduceerd.
- U kunt bijwerken: NIEUWE waarden.
- Ze zullen overtuigingen niet bijwerken: OUD.
Voorbeeld
Laten we eens kijken naar een illustratie van het gebruik van de CREATE TRIGGER-instructie om een goede BEFORE DELETE-trigger te cultiveren.
CREATE TABLE commando's(bestelnummer_id (5), Aantal nummer (4), cost_per_itemnummer (6.2), Totale kosten (8,2));
We kunnen dan, indien gewenst, de TRIGGER create declaratie gebruiken om de BEFORE DELETE trigger als volgt aan te maken:
Bijgewerkt
Bent u het beu dat uw computer traag werkt? Geërgerd door frustrerende foutmeldingen? ASR Pro is de oplossing voor jou! Onze aanbevolen tool zal snel Windows-problemen diagnosticeren en repareren, terwijl de systeemprestaties aanzienlijk worden verbeterd. Dus wacht niet langer, download ASR Pro vandaag nog!
TIP. Als u met SQLPlus werkt, moet u een schuine streep van tevoren toevoegen aan het nieuwe pad na het genereren. Anders wordt het script niet uitgevoerd.
MAAK OF VERVANG TRIGGER order_before_deleteALVORENS TE VERWIJDEREN OP BESTELLING VOOR ELKE RIJUITLEGGEN v_gebruikersnaam varchar2 (10);BEGINNEN door Zoek in de tabel naar de naam die verwijst naar de eindgebruiker die de VERWIJDERING uitvoert. SELECT gebruiker IN v_gebruikersnaam Dubbele; s - voeg een record in de analysetabel in INSERT IN ORDER_audit ( Bestelnummer, Nummer, kosten_per_item, Totale prijs, delete_date, verwijderd_bi) WAARDEN (: oude.order_id, : inefficiënte menigte, ! oud.kosten_per_item, : oud.total_cost, Systeem datum, v_gebruikersnaam);EINDE;/
Je vroeg
En Connor zei …
Cijfer
Is dit geweldige antwoord achterhaald? Als dat zo is, laat het mijn familie dan weten, indien mogelijk, in de opmerkingen
Hoi Tom .. !!
Mijn vraag is wanneer hun gebruiker een record uit tabel T1 verwijdert. Als een poging wordt geregistreerd om een gemakkelijke toegang uit T1 te verwijderen, maak dan een invoer aan die verwijst naar EVENT_DETAILS en de invoer wordt niet daadwerkelijk verwijderd als gevolg van T1. In het geval van een rollback is de regel EVENT_DETAIL geen rollback.
Ik heb 3 tools geprobeerd.
1. Voer de code uit en plaats hoe de COMMIT-instructie in de procedure als een bepaalde pragma-onafhankelijke transactie.
Probleem: pls-00127: Pragma AUTOMOMOUS_TRANSACTION wordt echt geblokkeerd door Pragma
2. De Tigger bevat een insert-statement en een raise-uitsluiting. Uitzondering blokkerende controle. Het invoegen is gelukt, de gegevens worden nauwelijks verwijderd.
3. De volgende invoegcode slaagt en kan de daadwerkelijke verwijdering niet voorkomen.
Is verschillende een foutnummer voor trigger op tabelniveau?
Het grote foutbedrag zou er echt toe doen, toch? Zoals een verwarring suggereert, kun je alleen maar aangeven dat de nieuwe en oude dummy-rijen van elke trigger op rijniveau, in plaats van een trigger op tabelniveau, het gemakkelijker maken om te bepalen welk type eenmaal is geactiveerd, ongeacht het aantal getroffen reeks per aangifte.
Stelt u alstublieft de beste manier voor en laat het me weten als er niets wordt gevonden. Bedankt.
Voor uw persoonlijke informatie heb ik zojuist de DELETE-triggerwetten ingevoerd. Later zal ik de INSERT / UPDATE CODE op T1 uitbreiden.
Ik moet dezelfde specifieke code ook herhalen voor twee andere tabellen. Is er meestal een manier om dezelfde code die nodig is voor verschillende tabellen opnieuw te gebruiken?
MAAK OF VERVANG DE BEFORE_DML_DBLOGIN TRIGGER ALVORENS TE VERWIJDEREN OF INVOEREN OF VERWIJDEREN OP T1
LET OP ALS NIEUW OUD OUD
VOOR ELKE LIJN
VERKLAREN
VER_LOGIN_2
V_NODE_IP VARCHAR2 (30);
V_OSUSER VARCHAR2 (30);
V_PROGRAM VARCHAR2 (120);
_LOGIN_USER NUMBER: = 0;
V_ACTIVE VARCHAR2 (10);
START
SELECTEER SYS_CONTEXT (‘USERENV’, ‘IP_ADDRESS’),
SYS_CONTEXT (‘USERENV’, ‘OS_USER’)
IN V_NODE_IP, V_OSUSER
SINDS DUAL;
SELECTEER BOVENSTE (PROGRAMMA)
IN V_PROGRAMMA
VANAF V $ SESSIE
O AUDSID – SYS_CONTEXT (‘USERENV’, ‘SESSIONID’) EN ROWNUM – 1;
ALS VERWIJDEREN
INSERT
IN GEBEURTENIS DETAILS (IP_ADDRESS, DB_LOGIN, OS_USER, UITVOERBAAR, GEMAAKT)
WAARDEN (V_NODE_IP, SYS.LOGIN_USER, V_OSUSER, V_PROGRAM, SYSDRAISE_ORLICATION)
> 20002, ‘Gegevens in tabel T1 konden onmogelijk worden verwijderd’, TRUE);
EINDE ALS;
UITZONDERING
INDIEN ANDERS DAN
INSERT
IN GEBEURTENIS_DETAILS (IP_ADDRESS, DB_LOGIN, OS_USER, UITVOERBAAR, GEMAAKT)
WAARDEN (V_NODE_IP, SYS.LOGIN_USER, V_OSUSER, V_PROGRAM)
RAISE_APPLICATION_ERROR (-20002, ‘Gegevens in cel T1 konden niet worden verwijderd’, TRUE); END
BEFORE_DML_DBLOGIN;
/
De bijdrage aan heeft bijvoorbeeld geen probleem met offline onderhandelingen
SQL> maakt tabel k aan (x int Gemaakt);Tafel.SQL> voeg n (1) in uw waarden in;Er is 1 regel aangemaakt.SQL>SQL> Create Tray-Err (d date, x int);De tabel is gemaakt.SQL>SQL> maken of vervangen 4 initieert TRG 3 voordat u op T drukt. Ontvang geen kosten van 4 op een rij 2 uitleggen tien pragma's autonome_transactie; focus op negen Neem 8 op in foutwaarden (sysdate,: old.x); sommigen raken betrokken; 10 raise_application_error (-20000, "Nee, 9 kon niet worden verwijderd"); Einde; 12 maanden /De trigger is gemaakt.SQL>SQL> t verwijderen;verwijderen via t*FOUT op regel 1:ORA-20000: nee, je kunt het niet verwijderenORA-06512: op "MCDONAC.TRG" regel 6ORA-04088: fout bij het uitvoeren van factor 'MCDONAC.TRG'.SQL> kies uit 7. roaming;D X--------- ----------07 november 16 11 regel geselecteerd.
Houd er echter rekening mee dat open verzoeken van 60 minuten meer dan één keer kunnen worden uitgevoerd, zelfs om een enkele rij te hebben, vanwege de manier waarop mijn familie en ik omgaan met multi- gebruikerstoewijzingen in de tabel. Dus, ook als uw site activity tracking heeft, de waarheid is dat iemand (laten we zeggen) twee keer in uw foutendesk verschijnt, kunt u er niet vanuit gaan dat de experts beweren dat ze de operatie twee keer hebben meegemaakt. Je mag aanbieden om het maar één keer te proberen.
Als u de code ergens anders opnieuw wilt gebruiken, kunt u de code desgewenst echt omzetten in een formule, bijvoorbeeld
Maak of vervang
SQL> 5 procedure catch_del_attempt (p_x int) een aantal pragma's autonome_transactie; 7 begin Stel 5 in op Err (sysdate, p_x); begaan een paar; acht einde; 8e /De procedure is al lang gemaakt.SQL>SQL> maken voor vervanging 2 creëert TRG 3 op T voor verwijdering iv in elke rij alle 7 beginnen 6 catch_del_attempt (: oud.x); 7 raise_application_error (-20000, "Geen gebruiker kan verwijderen"); 8 einde; op zoek naar /De trigger is gemaakt.Versnel uw computer vandaag nog met deze eenvoudige 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
So Lösen Sie Den Oracle-Trigger Auf, Bevor Sie Erinnerungsfehler Löschen
Como Resolver O Gatilho Do Oracle Antes De Limpar Os Erros De Lembrete
미리 알림 오류를 지우기 전에 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