2016-05-12 1 views
0

Ich habe einen Trigger mit dem folgenden Code erstelltEine SQL-Ausnahme wurde abgefangen. Der Fehler war: ORA-04098: Trigger ungültig ist und gescheiterte Wieder Validierung

create or replace trigger DTE_SAVE_ORIGINAL_VAL 
after update 
on attrvaldesc 
FOR Each row 
when (new.field2 is null) 
Declare 
attrvaloriginal attrval.attrval_id%TYPE; 
attrval_id attrval.attrval_id%TYPE; 
language_id attrvaldesc.language_id%type; 
storeent_id attrval.storeent_id%type; 
PRAGMA AUTONOMOUS_TRANSACTION; 
Begin 
Dbms_Output.Put_Line(:OLD.attrval_id); 
select attrval_id into attrvaloriginal from attrval where identifier = (select identifier||'_original' from attrval where attrval_id= :OLD.attrval_id and storeent_id=10051) and storeent_id=10051; 
if (attrvaloriginal > 0) then 
Dbms_Output.Put_Line(attrvaloriginal); 
Dbms_Output.Put_Line(:NEW.value); 
delete from attrval where attrval_id = attrvaloriginal and storeent_id=10051; 
commit; 
END IF; 
End; 

Der Auslöser zusammengestellt und wenn ich auslösen einen Job, die attrvaldesc Tabelle aktualisiert, I ist die unter Ausnahme

Ausnahmemeldung konfrontiert:

Ein SQL-Ausnahme abgefangen wurde. Der Fehler war: ORA-04098: Trigger 'WCS_ADMIN_HFI.DTE_SAVE_ORIGINAL_VAL' ist ungültig und gescheiterte Wieder Validierung

Stack-Trace:
com.ibm.commerce.foundation.dataload.exception.DataLoadSQLException: Eine SQL-Ausnahme abgefangen wurde. Der Fehler war: ORA-04098: Trigger 'WCS_ADMIN_HFI.DTE_SAVE_ORIGINAL_VAL' ist ungültig und gescheiterte Wieder Validierung

Um zu überprüfen, ob Fehler in meinem Stecher ich einen

tat
SHOW ERRORS TRIGGER DTE_SAVE_ORIGINAL_VAL; 

ich die unten zurück

18/1 PLS-00103: das Symbol "DROP"

+0

Ihr Trigger hat keinen "Drop" - Sind Sie sicher, dass Sie die richtige Version geladen haben? Ah, es hat auch keine 18 Zeilen, also hast du es als Teil eines größeren Skripts erstellt und einfach die '/' weggelassen, um den 'create trigger' auszuführen? Sie brauchen das, weil es PL/SQL ist. –

+0

Ja, ich habe nicht hinzugefügt/am Ende. Lass mich das versuchen – Shiva

+0

Es funktioniert jetzt. Danke Alex !! – Shiva

Antwort

1

Encountered Der Code, den Sie tut gezeigt haben das Wort "Tropfen" nicht enthalten. Die Fehlermeldung bezieht sich jedoch auch auf Zeile 18. In einem Trigger bezieht sich ein PLS-Fehler nur auf den PL/SQL-Abschnitt, beginnend mit declare oder begin. Ihr PL/SQL-Abschnitt hat nur 16 Zeilen, von declare bis end;. Dies zeigt an, dass das Problem nicht ganz in dem ist, was Sie gezeigt haben.

Daraus folgern wir, dass Sie Ihre Trigger als Teil eines Skripts erstellt haben, und die nächste Anweisung tropfte ein Objekt:

create or replace trigger DTE_SAVE_ORIGINAL_VAL 
... 
End; 

drop ... 

Weil es PL ist/SQL den Auslöser Schaffung needs to be submitted with a / character. Im Moment wird alles nach Ihrem eigentlichen Trigger, bis zum nächsten Mal, in dem ein / in Ihrem Skript (oder dem Ende des Skripts, möglicherweise) erscheint, versehentlich als Teil der Triggerdefinition eingefügt, was bedeutet, dass es auch Dinge enthält, die es nicht sind gültiges PL/SQL. Von dem Fehler, der eine drop enthält, kann es aber auch andere Anweisungen enthalten, die eine beliebige Anzahl von Objekten löschen, erstellen oder ändern.

So benötigen Sie einen Schrägstrich nach dem Trigger in Ihrem Skript hinzuzufügen:

create or replace trigger DTE_SAVE_ORIGINAL_VAL 
... 
End; 
/

drop ... 

können Sie nur den Auslöser Erklärung auf ihrer eigenen wieder laufen, aber bedenken Sie, dass was immer es folgte - alles, was war versehentlich als Teil des Auslösers behandelt - wurde überhaupt nicht ausgeführt, sodass Ihnen andere Objekte fehlen oder sie anders als erwartet aussehen (wenn das Skript Objekte löschen und dann neu erstellen sollte).

Sie möglicherweise möchten das gesamte Skript reparieren und dann erneut ausführen, solange Sie keine Daten hinzugefügt haben, die zerstören würde - was wahrscheinlich ist, wenn Sie jetzt Daten aktualisieren. Wenn das nicht sicher ist, dann sehen Sie, was sonst noch nicht gemacht wurde, und führen Sie diese Teile auch manuell aus, und achten Sie wieder auf möglichen Datenverlust.

+0

Danke !! Es funktioniert jetzt – Shiva

Verwandte Themen