Dies mag eine einfache Abfrage für die meisten von Ihnen erscheinen, aber ich bin ein Anfänger in Oracle DB. Eine Tabelle hat unter Script-Oracle_Trigger: Automatische Aktualisierung einer Spalte basierend auf INSERT/UPDATE
CREATE TABLE PLAN_TABLE
(
PL_ID DECIMAL(10,0) PRIMARY KEY NOT NULL
,PL_NAME VARCHAR2(300) DEFAULT NULL
,UPDATED_TS TIMESTAMP DEFAULT SYSDATE NOT NULL
,DELETE_FLAG DECIMAL(10,0) DEFAULT 0 NOT NULL
);
Die Forderung SYSDATE für UPDATED_TS für jeden neuen Datensatz erstellt wurde in die Tabelle eingefügt hat und auch im Fall, wenn der delete_flag auf 1 aktualisiert wird, kann es durch getan werden auslösen? Die unten Auslöser war created-
CREATE OR REPLACE TRIGGER PT_BEFORE_INSERT_TR
BEFORE INSERT ON PLAN_TABLE
FOR EACH ROW
BEGIN
SELECT SYSDATE INTO :new.UPDATED_TS FROM DUAL;
dbms_output.put_line('Inserted');
END;
/
Below Fehler aufgetreten ist, während Datensatz in die Tabellen- Fehler einfügen: ORA-04091: Tabelle I60_SCH04.PLAN_TABLE mutiert, Trigger/Funktion kann es nicht sehen
Können Sie mir bitte helfen, mich wissen zu lassen, wo ich den Fehler begehe? Gibt es einen besseren Weg, die Anforderung basierend auf INSERT/UPDATE zu erreichen?
Vielen Dank @ Micklesh.I unten Proben versucht, aber endete mit folgenden ergebnis- CREATE OR TRIGGER TR_AP_BEF_UPDATE BEFORE UPDATE DER delete_flag AUF PLAN_TABLE FÜR JEDE REIHE BEGIN IF REPLACE: NEW.DELETE_FLAG = 1 THEN: NEW. UPDATED_TS: = SYSDATE END IF; dbms_output.put_line ('Eingeschaltet'); ENDE; / --result: Ungültige Trigger CREATE OR TRIGGER TR_AP_BEF_UPDATE BEFORE UPDATE OF delete_flag ON PLAN_TABLE FÜR JEDE ZEILE BEGIN REPLACE: NEW.UPDATED_TS: = SYSDATE; dbms_output.put_line ('Eingeschaltet'); ENDE; / - Ergebnis: Gültiger Trigger Kannst du den Fehler finden, der im INVALID TRIGGER begangen wurde? – Anshu
Es scheint, Sie haben ein Semikolon (;) nach dem SYSDATE in der ersten Variante – micklesh
verpasst, danke für das Lernen. Alles Gute. – Anshu