So angepasst. Ich hole mir für den Typ die höchste Nummer und geht dann von 1 bis höchste Nummer und wenn eine nicht vergeben ist nimmt er die. Ansonsten eben die höchste Nummer +1. Ich habe das Gefühl, dass das nun mit Kanonen auf Spatzen ist, aber es funktioniert und all zu oft wird in der Tabelle nichts geändert.
Code:
create or replace TRIGGER MEIN_TRIGGER_TRG
BEFORE INSERT ON MEINE_TABELLE
FOR EACH ROW
DECLARE
maxZahl NUMBER(4);
counter NUMBER(4);
BEGIN
SELECT MAX(NUMMER) INTO maxZahl FROM meine_tabelle WHERE type = :NEW.TYPE;
FOR i in 1 .. maxZahl
LOOP
SELECT COUNT(*) INTO counter FROM meine_tabelle WHERE type = :NEW.TYPE AND NUMMER = i;
IF counter = 0 THEN
:NEW.NUMMER := i;
EXIT;
END IF;
END LOOP;
IF :NEW.NUMMER = 0 OR :NEW.NUMMER IS NULL THEN
:NEW.NUMMER := maxZahl+1;
END IF;
END;