DJTank Geschrieben 13. Oktober 2005 Geschrieben 13. Oktober 2005 Hallo Leute, ich versuche gerade etwas merkwürdiges, aber das muss leider so sein. Ich möchte beim Einfügen eines Datensatzes ein bestimmtes Feld darauf prüfen, ob der Wert, den ich reinschreiben will schon einmal vorhanden ist (ja ich weiß, normalerweise wäre das ein UK/PK, aber ich kann den hier nicht anwenden). Wenn der Wert schon vorhanden ist, sollte der Insert nicht erfolgen und eine Fehlermeldung zurückgegeben werden. Ich habe das mit folgendem Trigger probiert. Aber außer konfus ist das Teil wohl überhaupt nichts Kann mir da jemand etwas unter die Arme greifen? EDIT: Hm, Rollback scheint in einem Trigger sowieso nicht erlaubt zu sein, was aber das Problem nicht ändert. CREATE TRIGGER SA999.TRIG_UNIQUE_MATCHCODE BEFORE INSERT ON SA999.KONTO FOR EACH ROW DECLARE cMatchcode VARCHAR(20); BEGIN cMatchcode:=''; SELECT Matchcode INTO cMatchcode FROM Konto WHERE :OLD.Matchcode=:NEW.Matchcode; IF NOT cMatchcode = '' THEN ROLLBACK; END IF; END;
Jasper Geschrieben 13. Oktober 2005 Geschrieben 13. Oktober 2005 create or replace trigger tab_trig before insert on tab for each row declare dummy number; begin select 1 into dummy from tab where id = :new.id; raise_application_error(-20000, 'dup_id: '||:new.id); exception when NO_DATA_FOUND then null; when OTHERS then raise; end tab_trig; / liefert bei bereits vorhandener id den fehler ora-20001 mit fehlertext 'dup_id: <id>' zurück. -j
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden