Hallo zusammen,
ich brüte heute den ganzen Tag über ein Problem. Folgende Tabelle habe ich:
Nun möchte ich bei jedem Einfügen von Datensätze in die Tabelle im Feld ABLATTELEMENT die nächste freie Nummer ermitteln. Dazu habe ich einen Trigger erstellt:
Wenn ich ein Datensatz einfüge (natürlich ohne Vorgabe ABLATTELEMENT), funktioniert es wunderbar, bei mehreren Datensäte kommt as mutating table - Problem zu tragen.
ORA-04091: Tabelle wird gerade geändert
Gibt es überhaupt irgendein Lösungsansatz, wie ich eine eindeutige Nummer pro Feldinhalt ABLATT erzeugen kann?
Hoffe, mir kann jemand einen helfen. Gruß
Thomas
ich brüte heute den ganzen Tag über ein Problem. Folgende Tabelle habe ich:
Code:
CREATE TABLE TABLATT_ELEMENT ( ABLATT VARCHAR2(11 CHAR) NOT NULL, ABLATTELEMENT NUMBER(11,0) DEFAULT 0 NOT NULL, MENGE FLOAT(126) DEFAULT 0, CONSTRAINT PK_ELEMENT PRIMARY KEY (ABLATT, ABLATTELEMENT), CONSTRAINT FKC_ELEMENT3 FOREIGN KEY (ABLATT) REFERENCES TABLATT (ABLATT) );
Code:
create TRIGGER TR_ABLATTELEMENT BEFORE INSERT ON TABLATT_Element FOR EACH ROW DECLARE v_newVal NUMBER(11,0) := 0; BEGIN IF :new.ABLATTELEMENT is NULL THEN SELECT max(ABLATTELEMENT) INTO v_newVal FROM TABLATT_ELEMENT WHERE ablatt = :new.Ablatt; IF v_newVal IS NULL THEN v_newVal := 0; END IF; v_newVal := v_newVal + 1; :new.ABLATTELEMENT := v_newVal; END IF; END;
ORA-04091: Tabelle wird gerade geändert
Gibt es überhaupt irgendein Lösungsansatz, wie ich eine eindeutige Nummer pro Feldinhalt ABLATT erzeugen kann?
Hoffe, mir kann jemand einen helfen. Gruß
Thomas
Comment